# Переключение текущей сессии в нужную схему.

Допустим вам нужно сделать схему **main** текущей.

Это достигается выполнением следующей команды:

```postgresql
SET search_path TO main, public;
```

> **Как это работает:** Любые команды `CREATE TABLE qrtz_...` без явного указания схемы теперь будут создавать таблицы строго внутри `main`.

#### Проверьте переключение

Чтобы убедиться, что контекст изменился на `main`, выполните:

<div _ngcontent-ng-c2344738136="" class="code-block ng-tns-c2344738136-634 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjxq6-G55CXAxUAAAAAHQAAAAAQjgo" decode-data-ved="1" id="bkmrk-sql" jslog="223238;track:impression,attention;BardVeMetadataKey:W1sicl85OGU2Mjg4ZGE3NzNiZGFlIiwiY19jZTI4YjI2MDZhYmQwMzk2IixudWxsLCJyY19kMGQzNjI1ZDgxMTdhYTFmIixudWxsLG51bGwsInJ1IixudWxsLDEsbnVsbCxudWxsLDEsMF1d"></div>```
SHOW search_path;
SELECT current_schema();

```

<div _ngcontent-ng-c2344738136="" class="code-block ng-tns-c2344738136-634 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwjxq6-G55CXAxUAAAAAHQAAAAAQjgo" decode-data-ved="1" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:W1sicl85OGU2Mjg4ZGE3NzNiZGFlIiwiY19jZTI4YjI2MDZhYmQwMzk2IixudWxsLCJyY19kMGQzNjI1ZDgxMTdhYTFmIixudWxsLG51bGwsInJ1IixudWxsLDEsbnVsbCxudWxsLDEsMF1d"><div _ngcontent-ng-c2344738136="" class="formatted-code-block-internal-container ng-tns-c2344738136-634"><div _ngcontent-ng-c2344738136="" class="animated-opacity ng-tns-c2344738136-634"></div></div></div>*В ответе должно быть `main`.*

<div _ngcontent-ng-c2589024448="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B4%D0%B2%D1%83%D1%85-%D1%81%D1%85%D0%B5%D0%BC-%D0%BE" inline-copy-host=""><div>Указание двух схем определяет **порядок поиска объектов и резервный контекст**.</div>  
<div>Когда вы пишете `SET search_path TO main, public;`, вы задаете списку схем приоритет слева направо:</div>  
1. <div>**При создании объектов (`CREATE TABLE ...`)**</div>  
    <div>PostgreSQL всегда создает новый объект в **первой** схеме списка (в данном случае `main`), если вы не указали схему явно (например, `CREATE TABLE public.my_table`).</div>
2. <div>**При поиске и чтении данных (`SELECT * FROM my_table`)**</div>  
    <div>PostgreSQL ищет таблицу по очереди:</div>  
    
    - <div>Сначала проверяет, есть ли `my_table` в схеме `main`.</div>
    - <div>Если не находит — ищет её в схеме `public`.</div>
    - <div>Если её нет и там — выдает ошибку `relation "my_table" does not exist`.</div>
3. <div>**Доступ к системным функциям и расширениям**</div>  
    <div>В схеме `public` часто располагаются стандартные расширения (extensions), служебные функции или общие справочники базы данных. Указав `public` вторым номером, вы гарантируете, что PostgreSQL сможет найти эти системные функции, даже если вы работаете в `main`.</div>

</div>##### Что будет, если указать только `main`?

<div _ngcontent-ng-c2589024448="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%95%D1%81%D0%BB%D0%B8-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C-set-se" inline-copy-host=""><div>Если написать `SET search_path TO main;`:</div>  
- <div>Все таблицы создадутся в `main` (как и нужно).</div>
- <div>Но если вашей программе или функции потребуется объект или расширение из `public`, PostgreSQL его не увидит и выдаст ошибку.</div>

<div>Поэтому запись `SET search_path TO main, public;` является стандартом: **новые объекты создаются в `main`, но старые и системные объекты из `public` остаются доступны для чтения**.</div></div>