Переключение текущей сессии в нужную схему.
Допустим вам нужно сделать схему main текущей.
Это достигается выполнением следующей команды:
SET search_path TO main, public;
Как это работает: Любые команды
CREATE TABLE qrtz_...без явного указания схемы теперь будут создавать таблицы строго внутриmain.
Проверьте переключение
Чтобы убедиться, что контекст изменился на main, выполните:
SHOW search_path;
SELECT current_schema();
В ответе должно быть main.
Указание двух схем определяет порядок поиска объектов и резервный контекст.
Когда вы пишете
SET search_path TO main, public;, вы задаете списку схем приоритет слева направо:-
При создании объектов (
CREATE TABLE ...)
PostgreSQL всегда создает новый объект в первой схеме списка (в данном случаеmain), если вы не указали схему явно (например,CREATE TABLE public.my_table). -
При поиске и чтении данных (
SELECT * FROM my_table)
PostgreSQL ищет таблицу по очереди:
-
Сначала проверяет, есть ли
my_tableв схемеmain. -
Если не находит — ищет её в схеме
public. -
Если её нет и там — выдает ошибку
relation "my_table" does not exist.
-
-
Доступ к системным функциям и расширениям
В схемеpublicчасто располагаются стандартные расширения (extensions), служебные функции или общие справочники базы данных. Указавpublicвторым номером, вы гарантируете, что PostgreSQL сможет найти эти системные функции, даже если вы работаете вmain.
Что будет, если указать только main?
Если написать
SET search_path TO main;:-
Все таблицы создадутся в
main(как и нужно). -
Но если вашей программе или функции потребуется объект или расширение из
public, PostgreSQL его не увидит и выдаст ошибку.
Поэтому запись
SET search_path TO main, public; является стандартом: новые объекты создаются в main, но старые и системные объекты из public остаются доступны для чтения.
No comments to display
No comments to display