Постоянно установленный путь к схеме Postgresql - PullRequest
117 голосов
/ 20 мая 2010

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

SET SCHEMA PATH a,b,c

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

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

Ответы [ 3 ]

140 голосов
/ 20 мая 2010

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

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

Две важные вещи, о которых нужно знать:

  1. Если имя схемы не простое, его необходимо заключить в двойные кавычки.
  2. Порядок, в котором вы устанавливаете схемы по умолчанию a, b, c, имеет значение, так как это также порядок, в котором схемы будут просматриваться для таблиц. Поэтому, если у вас есть одно и то же имя таблицы в нескольких схемах по умолчанию, двусмысленности не будет, сервер всегда будет использовать таблицу из первой схемы, указанной вами для search_path.
111 голосов
/ 15 февраля 2014

Вы можете установить значение по умолчанию 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> для создания ваших баз данных.

16 голосов
/ 04 октября 2017

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...