Как выбрать схему в postgres при использовании psql?

152

У меня есть база данных postgres с несколькими схемами. Когда я подключаюсь к базе данных из оболочки psqlи запускаю \dtее, она использует схему соединения по умолчанию, которая является общедоступной . Есть ли флаг, который я могу указать, или как я могу изменить схему?

mehany
источник
1
Рассмотрим: stackoverflow.com/questions/9067335/…
Эрвин Брандштеттер

Ответы:

198

В PostgreSQL система определяет, какая таблица имеется в виду, следуя пути поиска, который представляет собой список схем для поиска.

Первая совпадающая таблица в пути поиска считается требуемой, в противном случае, если совпадений не найдено, возникает ошибка, даже если совпадающие имена таблиц существуют в других схемах в базе данных.

Чтобы показать текущий путь поиска, вы можете использовать следующую команду:

SHOW search_path;

И чтобы поместить новую схему в путь, вы можете использовать:

SET search_path TO myschema;

Или, если вы хотите несколько схем:

SET search_path TO myschema, public;

Ссылка: https://www.postgresql.org/docs/current/static/ddl-schemas.html

Сиро Педрини
источник
77

Вы хотите изменить базу данных?

\l - to display databases
\c - connect to new database

Обновить.

Я прочитал еще раз ваш вопрос. Для отображения схем

\dn - list of schemas

Чтобы изменить схему, вы можете попробовать

SET search_path TO
miholeus
источник
1
Как это сделать не в PSQL. как «подключиться»
математика
46
\l - Display database
\c - Connect to database
\dn - List schemas
\dt - List tables inside public schemas
\dt schema1. - List tables inside particular schemas. For eg: 'schema1'.
Мохамед Самер
источник
17
Не
забывайте,
1
Это не отвечает на вопрос. Он спросил, как изменить схему по умолчанию. Не основные команды для PSQL.
Кенни Стигманс
27

Используйте имя схемы с точкой в ​​команде psql для получения информации об этой схеме.

Настроить:

test=# create schema test_schema;
CREATE SCHEMA
test=# create table test_schema.test_table (id int);
CREATE TABLE
test=# create table test_schema.test_table_2 (id int);
CREATE TABLE

Показать список отношений в test_schema:

test=# \dt test_schema.
               List of relations
   Schema    |     Name     | Type  |  Owner   
-------------+--------------+-------+----------
 test_schema | test_table   | table | postgres
 test_schema | test_table_2 | table | postgres
(2 rows)

Показать test_schema.test_tableопределение:

test=# \d test_schema.test_table
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Показать все таблицы в test_schema:

test=# \d test_schema.
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Table "test_schema.test_table_2"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

и т.д...

Клину
источник
6
Я пропустил период после \ dt test_schema. что приводит к сообщению "связь не найдена". Спасибо за примеры, это стало намного проще :)
mehany
14

Это старый, но я поставил экспорт в свой псевдоним для подключения к БД:

alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc"

И для другой схемы:

alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc"
techbrownbags
источник
2
Хорошая идея. Я бы пропустил exportи точку с запятой в ваших псевдонимах. Этот путь PGOPTIONSне остается после того, как вы покидаете PSQL.
Дорон Голд
это отличная идея, гораздо более практичная, чем добавление SET search_pathк каждому запросу. Спасибо!
Храбан
6

ключевое слово:

SET search_path TO

пример :

SET search_path TO your_schema_name;
appsdownload
источник
4

Быстрое решение может быть:

SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";
Станислав
источник
0

если вы играете с psql внутри docker, выполните это так:

docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name
andilabs
источник