Постоянно установить путь схемы Postgresql

136

Мне нужно установить путь к схеме в Postgres, чтобы я не каждый раз указывал таблицу точек схемы, например schema2.table. Установить путь к схеме:

SET SCHEMA PATH a,b,c

Кажется, работает только для одного сеанса запроса на Mac, после того как я закрываю окно запроса, переменная пути возвращается к значению по умолчанию.

Как я могу сделать это постоянным?

Nakh
источник
Я думаю, это SET search_path TO a, b, c; как сказано в ответе, а не УСТАНОВИТЬ ПУТЬ СХЕМЫ a, b, c;
Armando

Ответы:

168

(И если у вас нет доступа администратора к серверу)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

Необходимо знать две важные вещи:

  1. Если имя схемы непростое, его нужно заключить в двойные кавычки.
  2. Порядок, в котором вы устанавливаете схемы по умолчанию, a, b, cимеет значение, так как это также порядок, в котором схемы будут искать таблицы. Таким образом, если у вас есть одно и то же имя таблицы в нескольких схемах среди значений по умолчанию, не будет двусмысленности, сервер всегда будет использовать таблицу из первой схемы, которую вы указали для своего search_path.
Милен А. Радев
источник
19
Также стоит отметить, что НЕ следует явно использовать кавычки в перечислениях a, b, c. Рукой ко лбу за последние 15 минут ...
Jmoney38 05
4
@ Jmoney38 Не использовать одинарные кавычки, но двойные кавычки требуются для непростых имен схем.
vitaly-t
136

Вы можете установить значение search_pathпо умолчанию на уровне базы данных:

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

Или на уровне пользователя или роли:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

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

Когда создается база данных, она создается по умолчанию из скрытой «шаблонной» базы данных с именем template1 , вы можете изменить эту базу данных, указав новый путь поиска по умолчанию для всех баз данных, созданных в будущем. Вы также можете создать другую базу данных шаблона и использовать ее CREATE DATABASE <database_name> TEMPLATE <template_name>для создания своих баз данных.

joshperry
источник
9
для тех, кому интересно, из командной строки psql вы можете перечислить схемы по \ dn
BKSpurgeon
3
Необходимо отключить сеанс и подключиться снова, чтобы настройки вступили в силу.
isapir
о, благослови тебя. перешел на PG с SQL Server, так что для меня это все в
Нейт Андерсон
24

Джош прав, но он не учел один вариант:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

Задайте путь поиска для пользователя в одной конкретной базе данных.

Крис Джонсон
источник
тоже очень полезно. Спасибо
Алехандро Тейшейра Муньос