Search paths что это за программа
Кластер баз данных Postgres Pro содержит один или несколько именованных экземпляров баз. На уровне кластера создаются роли и некоторые другие объекты. При этом в рамках одного подключения к серверу можно обращаться к данным только одной базы — той, что была выбрана при установлении соединения.
Примечание
Пользователи кластера не обязательно будут иметь доступ ко всем базам данных этого кластера. Тот факт, что роли создаются на уровне кластера, означает только то, что в кластере не может быть двух ролей joe в разных базах данных, хотя система позволяет ограничить доступ joe только некоторыми базами данных.
База данных содержит одну или несколько именованных схем, которые в свою очередь содержат таблицы. Схемы также содержат именованные объекты других видов, включая типы данных, функции и операторы. Одно и то же имя объекта можно свободно использовать в разных схемах, например и schema1 , и myschema могут содержать таблицы с именем mytable . В отличие от баз данных, схемы не ограничивают доступ к данным: пользователи могут обращаться к объектам в любой схеме текущей базы данных, если им назначены соответствующие права.
Урок №22. Установка CLASS PATH, первая программа
Есть несколько возможных объяснений, для чего стоит применять схемы:
Чтобы одну базу данных могли использовать несколько пользователей, независимо друг от друга.
Чтобы объединить объекты базы данных в логические группы для облегчения управления ими.
Схемы в некоторым смысле подобны каталогам в операционной системе, но они не могут быть вложенными.
5.8.1. Создание схемы
Для создания схемы используется команда CREATE SCHEMA . При этом вы определяете имя схемы по своему выбору, например так:
CREATE SCHEMA myschema;
Чтобы создать объекты в схеме или обратиться к ним, указывайте полное имя, состоящее из имён схемы и объекта, разделённых точкой:
схема.таблица
Этот синтаксис работает везде, где ожидается имя таблицы, включая команды модификации таблицы и команды обработки данных, обсуждаемые в следующих главах. (Для краткости мы будем говорить только о таблицах, но всё это распространяется и на другие типы именованных объектов, например, типы и функции.)
Есть ещё более общий синтаксис
база_данных.схема.таблица
но в настоящее время он поддерживается только для формального соответствия стандарту SQL. Если вы указываете базу данных, это может быть только база данных, к которой вы подключены.
Таким образом, создать таблицу в новой схеме можно так:
CREATE TABLE myschema.mytable ( . );
Чтобы удалить пустую схему (не содержащую объектов), выполните:
DROP SCHEMA myschema;
Удалить схему со всеми содержащимися в ней объектами можно так:
DROP SCHEMA myschema CASCADE;
Стоящий за этим общий механизм описан в Разделе 5.13.
Часто бывает нужно создать схему, владельцем которой будет другой пользователь (это один из способов ограничения пользователей пространствами имён). Сделать это можно так:
Урок 8 — Модуль PATH
CREATE SCHEMA имя_схемы AUTHORIZATION имя_пользователя;
Вы даже можете опустить имя схемы, в этом случае именем схемы станет имя пользователя. Как это можно применять, описано в Подразделе 5.8.6.
Схемы с именами, начинающимися с pg_ , являются системными; пользователям не разрешено использовать такие имена.
5.8.2. Схема public
До этого мы создавали таблицы, не указывая никакие имена схем. По умолчанию такие таблицы (и другие объекты) автоматически помещаются в схему « public » . Она содержится во всех создаваемых базах данных. Таким образом, команда:
CREATE TABLE products ( . );
CREATE TABLE public.products ( . );
5.8.3. Путь поиска схемы
Везде писать полные имена утомительно, и часто всё равно лучше не привязывать приложения к конкретной схеме.
Поэтому к таблицам обычно обращаются по неполному имени, состоящему просто из имени таблицы. Система определяет, какая именно таблица подразумевается, используя путь поиска, который представляет собой список просматриваемых схем. Подразумеваемой таблицей считается первая подходящая таблица, найденная в схемах пути. Если подходящая таблица не найдена, возникает ошибка, даже если таблица с таким именем есть в других схемах базы данных.
Возможность создавать одноимённые объекты в разных схемах усложняет написание запросов, которые должны всегда обращаться к конкретным объектам. Это также потенциально позволяет пользователям влиять на поведение запросов других пользователей, злонамеренно или случайно. Ввиду преобладания неполных имён в запросах и их использования внутри Postgres Pro , добавить схему в search_path — по сути значит доверять всем пользователям, имеющим право CREATE в этой схеме. Когда вы выполняете обычный запрос, злонамеренный пользователь может создать объекты в схеме, включённой в ваш путь поиска, и таким образом перехватывать управление и выполнять произвольные функции SQL как если бы их выполняли вы.
Первая схема в пути поиска называется текущей. Эта схема будет использоваться не только при поиске, но и при создании объектов — она будет включать таблицы, созданные командой CREATE TABLE без указания схемы.
Чтобы узнать текущий тип поиска, выполните следующую команду:
SHOW search_path;
В конфигурации по умолчанию она возвращает:
search_path ————— «$user», public
Первый элемент ссылается на схему с именем текущего пользователя. Если такой схемы не существует, ссылка на неё игнорируется. Второй элемент ссылается на схему public, которую мы уже видели.
Первая существующая схема в пути поиска также считается схемой по умолчанию для новых объектов. Именно поэтому по умолчанию объекты создаются в схеме public. При указании неполной ссылки на объект в любом контексте (при модификации таблиц, изменении данных или в запросах) система просматривает путь поиска, пока не найдёт соответствующий объект. Таким образом, в конфигурации по умолчанию неполные имена могут относиться только к объектам в схеме public.
Чтобы добавить в путь нашу новую схему, мы выполняем:
SET search_path TO myschema,public;
(Мы опускаем компонент $user , так как здесь в нём нет необходимости.) Теперь мы можем обращаться к таблице без указания схемы:
DROP TABLE mytable;
И так как myschema — первый элемент в пути, новые объекты будут по умолчанию создаваться в этой схеме.
Мы можем также написать:
SET search_path TO myschema;
Тогда мы больше не сможем обращаться к схеме public, не написав полное имя объекта. Единственное, что отличает схему public от других, это то, что она существует по умолчанию, хотя её так же можно удалить.
В Разделе 9.25 вы узнаете, как ещё можно манипулировать путём поиска схем.
Как и для имён таблиц, путь поиска аналогично работает для имён типов данных, имён функций и имён операторов. Имена типов данных и функций можно записать в полном виде так же, как и имена таблиц. Если же вам нужно использовать в выражении полное имя оператора, для этого есть специальный способ — вы должны написать:
OPERATOR(схема.оператор)
Такая запись необходима для избежания синтаксической неоднозначности. Пример такого выражения:
SELECT 3 OPERATOR(pg_catalog.+) 4;
На практике пользователи часто полагаются на путь поиска, чтобы не приходилось писать такие замысловатые конструкции.
5.8.4. Схемы и права
По умолчанию пользователь не может обращаться к объектам в чужих схемах. Чтобы изменить это, владелец схемы должен дать пользователю право USAGE для данной схемы. Чтобы пользователи могли использовать объекты схемы, может понадобиться назначить дополнительные права на уровне объектов.
Пользователю также можно разрешить создавать объекты в схеме, не принадлежащей ему. Для этого ему нужно дать право CREATE в требуемой схеме. Заметьте, что по умолчанию все имеют права CREATE и USAGE в схеме public . Благодаря этому все пользователи могут подключаться к заданной базе данных и создавать объекты в её схеме public . Некоторые шаблоны использования требуют запретить это:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
(Первое слово « public » обозначает схему, а второе означает « каждый пользователь » . В первом случае это идентификатор, а во втором — ключевое слово, поэтому они написаны в разном регистре; вспомните указания из Подраздела 4.1.1.)
5.8.5. Схема системного каталога
В дополнение к схеме public и схемам, создаваемым пользователями, любая база данных содержит схему pg_catalog , в которой находятся системные таблицы и все встроенные типы данных, функции и операторы. pg_catalog фактически всегда является частью пути поиска. Если даже эта схема не добавлена в путь явно, она неявно просматривается до всех схем, указанных в пути. Так обеспечивается доступность встроенных имён при любых условиях. Однако вы можете явным образом поместить pg_catalog в конец пути поиска, если вам нужно, чтобы пользовательские имена переопределяли встроенные.
Так как имена системных таблиц начинаются с pg_ , такие имена лучше не использовать во избежание конфликта имён, возможного при появлении в будущем системной таблицы с тем же именем, что и ваша. (С путём поиска по умолчанию неполная ссылка будет воспринята как обращение к системной таблице.) Системные таблицы будут и дальше содержать в имени приставку pg_ , так что они не будут конфликтовать с неполными именами пользовательских таблиц, если пользователи со своей стороны не будут использовать приставку pg_ .
5.8.6. Шаблоны использования
Схемам можно найти множество применений. Для защиты от влияния недоверенных пользователей на поведение запросов других пользователей предлагается шаблон безопасного использования схем, но если этот шаблон не применяется в базе данных, пользователи, желающие безопасно выполнять в ней запросы, должны будут принимать защитные меры в начале каждого сеанса. В частности, они должны начинать каждый сеанс с присвоения пустого значения переменной search_path или каким-либо другим образом удалять из search_path схемы, доступные для записи обычным пользователям. С конфигурацией по умолчанию легко реализуются следующие шаблоны использования:
Ограничить обычных пользователей личными схемами. Для реализации этого подхода выполните REVOKE CREATE ON SCHEMA public FROM PUBLIC и создайте для каждого пользователя схему с его именем. Как вы знаете, путь поиска по умолчанию начинается с имени $user , вместо которого подставляется имя пользователя. Таким образом, если у всех пользователей будет отдельная схема, они по умолчанию будут обращаться к собственным схемам. Применяя этот шаблон в базе, к которой уже могли подключаться недоверенные пользователи, проверьте, нет ли в схеме public объектов с такими же именами, как у объектов в схеме pg_catalog . Этот шаблон является шаблоном безопасного использования схем, только если никакой недоверенный пользователь не является владельцем базы данных и не имеет права CREATEROLE . В противном случае безопасное использование схем невозможно.
Удалить схему public из пути поиска по умолчанию, изменив postgresql.conf или выполнив команду ALTER ROLE ALL SET search_path = «$user» . При этом все по-прежнему смогут создавать объекты в общей схеме, но выбираться эти объекты будут только по полному имени, со схемой. Тогда как обращаться к таблицам по полному имени вполне допустимо, обращения к функциям в общей схеме всё же будут небезопасными или ненадёжными. Поэтому если вы создаёте функции или расширения в схеме public, применяйте первый шаблон. Если же нет, этот шаблон, как и первый, безопасен при условии, что никакой недоверенный пользователь не является владельцем базы данных и не имеет права CREATEROLE .
При любом подходе, устанавливая совместно используемые приложения (таблицы, которые нужны всем, дополнительные функции сторонних разработчиков и т. д.), помещайте их в отдельные схемы. Не забудьте дать другим пользователям права для доступа к этим схемам. Тогда пользователи смогут обращаться к этим дополнительным объектам по полному имени или при желании добавят эти схемы в свои пути поиска.
5.8.7. Переносимость
Стандарт SQL не поддерживает обращение в одной схеме к разным объектам, принадлежащим разным пользователям. Более того, в ряде реализаций СУБД нельзя создавать схемы с именем, отличным от имени владельца. На практике, в СУБД, реализующих только базовую поддержку схем согласно стандарту, концепции пользователя и схемы очень близки. Таким образом, многие пользователи полагают, что полное имя на самом деле образуется как имя_пользователя . имя_таблицы . И именно так будет вести себя Postgres Pro , если вы создадите схемы для каждого пользователя.
В стандарте SQL нет и понятия схемы public . Для максимального соответствия стандарту использовать схему public не следует.
Конечно, есть СУБД, в которых вообще не реализованы схемы или пространства имён поддерживают (возможно, с ограничениями) обращения к другим базам данных. Если вам потребуется работать с этими системами, максимальной переносимости вы достигнете, вообще не используя схемы.
Пред. | Начало | След. |
5.7. Политики защиты строк | Наверх | 5.9. Наследование |
Источник: postgrespro.ru
Sysadminium
В этой статье поговорим про схемы в базах данных PostgreSQL и шаблоны. Для понимания, иерархия такая: СУБД > Базы данных > Схемы > Таблицы (и другие объекты).
Оглавление скрыть
Базы данных и шаблоны
Когда мы создаём новые кластер командой initdb у нас создается 3 одинаковые базы данных:
База postgres используется, чтобы по умолчанию к ней подключаться. Принципиально она не нужна, но есть приложения которым она может понадобится, поэтому лучше её не удалять.
Две дополнительные базы template0 и template1 – это шаблоны. Новая база всегда создается путём копирования из другой шаблонной базы. По умолчанию для шаблона используется база template1. Поэтому, если у вас есть расширения, которыми вы пользуетесь, можете их заранее создать в template1.
Основная задача базы template0 заключается в том, что бы она никогда не менялась. Она используется, например при загрузке базы из дампа. Вначале вы создаёте базу из template0, а затем туда заливаете сохранённый дамп. Также база template0 позволяет создавать базы с использованием категорий локалей не по умолчанию (LC_COLLATE, LC_CTYPE).
Схемы
Схема – это пространство имён для объектов внутри базы данных.
Суть работы схемы можно представить так: мы все складываем не все в одну большую кучу, а по небольшим отдельным кучкам. Например, как в файловой системе, всё кладем не в один каталог, а раскладываем по подкаталогам.
Вот пример работы со схемами! В одну схему поместим объекты для модуля “логистика”, а в другую для модуля “финансы” и так далее.
В базе данных может быть несколько схем. По умолчанию существует две глобальные схемы. Глобальные они потому-что не принадлежат какой-то определённой базе данных:
- pg_catalog – служебная схема (её ещё называют системный каталог), присутствует во всех базах данных, например там находится представление pg_tables;
- public – общая схема, присутствует во всех базах данных и по умолчанию все объекты создаются в ней.
Также вы можете создать свои дополнительные схемы.
Путь поиска
Так называемое “Квалифицированное имя” состоит из явно указанной схемы и имени объекта (как абсолютный путь в файловой системе). Например: .
Если мы не указываем схему, то нужно понять, в какой схеме искать или создавать объект. Определяют схему с помощью пути поиска, который задается параметром search_path.
В параметре search_path можно через запятую перечислить схемы, в которых нужно искать объект, если мы не указываем схему явно. search_path это что-то вроде переменной окружения PATH в Linux, для поиска команд.
Из search_path исключаются:
- несуществующие схемы;
- схемы к которым нет доступа.
А некоторые схемы всегда добавляются в search_path, даже если мы их туда не запишем. Например pg_catalog.
Реальное значение search_path показывает функция current_schemas().
При создании нового объекта, он будет помещаться в первую указанную в search_path схему. Если посмотреть пример выше, то так как у нас нет права писать в схему pg_catalog, объекты будут создаваться в public.
Специальные схемы, временные объекты
К специальным схемам относят:
- public – по умолчанию входит в путь поиска, если ничего не менять, все объекты будут в этой схеме.
- Схема, одноимённая с пользователем – по умолчанию входит в search_path, но не существует. Если сделать, например схему postgres, то пользователь postgres будет по умолчанию работать с этой схемой.
- pg_catalog – схема для объектов системного каталога. Если pg_catalog не прописан, то это схема будет там подразумеваться первой.
Временные таблицы – существуют на время сеанса или транзакции. Они не журналируются и не попадают в общую память. Чтобы реализовать временную таблицу в postgres применяет временные схемы.
Схема pg_temp_N – автоматически создается для временных таблиц. Такая схема тоже по умолчанию находится в search_path. По окончанию все объекты временной схемы удаляются, а сама схема остается. Оставшаяся временная схема может использоваться для новых временных таблиц, новой транзакции или сеанса.
Практика
Список баз
Как мы уже видели с помощью команды l , у нас действительно 3 базы. Сейчас мы подключены к базе postgres. Тут мы можем обратиться к представлению pg_database и посмотреть на список баз из этого представления:
- datname – имя базы данных;
- datistemplate – является ли база данных шаблоном;
- datallowconn – разрешены ли соединения с базой данных;
- datconnlimit – максимальное количество соединений (-1 = без ограничений).
Настройка шаблона template1
Проверим, доступна ли нам функция шифрования в этой базе, если не доступна, то создадим необходимое расширение и повторим проверку:
В случае если у вас не было скомпилировано это расширение, то в первом уроке мы разбирали как компилировать postgres и его расширения. Примерно это делается так:
$ cd postgresql-13.3/contrib/pgcrypto/ $ make $ sudo make install
Теперь создадим новую базу данных и так как она была создана из шаблона template1, то и расширение pgcrypto здесь уже установлено:
Выше мы вначале отключились от базы template1, так как использовать шаблон можно только, если к нему никто не подключен!
Редактирование базы
Теперь переименуем созданную базу данных (ALTER DATABASE … RENAME TO … ), предварительно отключившись от неё:
С помощью ALTER DATABASE можно менять и другие параметры, например число доступных подключений:
Смотрим размер базы данных
Размер базы данных можно считать с помощью функции pg_database_size(). Для перевода из байтов в более удобочитаемые единицы, можно использовать функцию pg_size_pretty():
Вот мы и узнали размер пустой базы!
Работа со схемами
Список схем можно узнать с помощью команды dn:
Это не все схемы, здесь исключены служебные схемы!
Создадим новую схему, предварительно подключившись к нашей базе:
На путь поиска схем можно посмотреть с помощью search_path:
Это означает, что при создании таблицы, она попытается попасть в схему “$user” (postgres), но такой схемы нет. А затем попадет в схему public! И наоборот, при обращении к таблице она будет искаться в начале в “$user”, а затем в public!
Дополнительно можем посмотреть текущие схемы, в этой базе данных с помощью функции current_schemas():
Здесь мы видим служебную схему pg_catalog, но к ней нет доступа. Поэтому судя по пути поиска и по текущим схемам, можем сказать что по умолчанию таблицы будут создаваться в схеме public.
Теперь создадим таблицу “t“, в ней создадим строку и с помощью команды dt посмотрим в какой схеме оказалась эта таблица:
Таблицы можно перемещать между схемами с помощью ALTER TABLE . SET SCHEMA . . Если схемы нет в пути поиска, то к таблицам в этой схеме нужно обращаться по полному пути:
Выше мы видим, что не указав полный путь мы получили ошибку!
Установить путь поиска можно так:
Но это установит путь только для текущего сеанса!
Установить этот параметр для базы, а не для сеанса можно с помощью ALTER DATABASE . SET search_path = . :
appdb=# ALTER DATABASE appdb SET search_path = public, app; ALTER DATABASE
Выше команда означает, что при подключении к базе appdb будет выполняться команда SET search_path = public, app.
Теперь создадим временную таблицу с таким-же именем “t” и посмотрим что из этого выйдет:
Мы видим только временную таблицу, а первую созданную таблицу уже не видим в списке баз!
Посмотрим на текущий путь поиска с помощью функции current_schemas (). А затем вставим строку во временную таблицу и прочитаем её. И далее прочитаем строки из обычной таблицы используя полный путь:
При выходе из сеанса все объекты во временной схеме уничтожаются:
Удаление схемы и базы
Схему нельзя удалить, если в ней есть какие-нибудь объекты. А для удаления схемы вместе с объектами нужно использовать опцию CASCADE:
Базу данных можно удалить, если к ней нет активных подключений:
Источник: sysadminium.ru
Изменение пути поиска PostgreSQL не работает как рекламируется
Я использую PostgreSQL 9.0.3 на RedHat. База данных содержит две схемы public и wh . Я создал новую роль под названием django . Я хочу, чтобы этот пользователь использовал wh схема по умолчанию.
следуя руководству, я сделал:
ALTER USER django SET SEARCH_PATH TO wh, public;
это, кажется, работает:
SHOW SEARCH_PATH; search_path ————- wh, public
однако, если я тогда сделаю dt , отображаются только таблицы из общедоступной схемы. В руководстве изменение пути поиска должно иметь немедленный эффект, и я должен иметь доступ wh таблицы без префикса, но это не тот случай. Вход и выход сохраняет изменения в search_path но не показывает никакого изменения поведения.
автор: Erwin Brandstetter
5 ответов
Это может решить вашу проблему:
GRANT USAGE ON SCHEMA wh TO django;
(или предоставить использование любой роли, которая имеет django в качестве (прямого или косвенного) члена.)
(Или предоставить все . если ты этого хочешь.)
задание search_path указывает Postgres искать объекты в перечисленных схемах. Он не дает разрешения посмотреть, что там. Если «django» не имеет необходимых привилегий, dt не должен (и не показывает) эту информацию.
С другой стороны, если вы уже пробовали как суперпользователь (согласно вашему комментарию к предыдущему предложению), тогда это может быть не так .
автор: Erwin Brandstetter
это может быть ограничение .
чтобы убедиться, что search_path работает правильно, попробуйте запустить SELECT * FROM some_table здесь some_table — это тот, который находится в схеме wh.
автор: a_horse_with_no_name
Я только что протестировал его (только выпуски) 9.1 на 64-разрядной версии Windows, и он работал так, как указано.
остальные варианты изменяют сеанс роли по умолчанию для переменная конфигурации, либо для всех баз данных, либо при Предложение DATABASE указано только для сеансов в именованной базе данных. Когда затем начинается новый сеанс, указанный значение становится сеансом по умолчанию, переопределение любой настройки присутствует в PostgreSQL.conf или был получен от postgres командная строка. это происходит только во время входа в систему; выполнение роли или SET SESSION AUTHORIZATION не вызывает новые значения конфигурации будет установлено.
автор: Milen A. Radev
для PostgreSQL , если пользователь подключает базу данных и ищет объекты, такие как таблица, сначала он будет искать схему так же, как то же имя имени пользователя, если не найден, он будет ищите общедоступную схему, в вашем случае, если вы подключаете базу данных через пользователя django, он по умолчанию ищет схему django, но вы хотите, чтобы текущая схема была wh, поэтому сделайте имя схемы и имя роли одинаковыми, а затем войдите в базу данных, поскольку роль будет засунуть вашу проблему, не вводя префикс, просто попробуйте!
автор: francs
для меня проблема заключалась в том, что я пытался установить путь поиска в pgAdmin. По какой-то причине он не применял изменения к search_path. (Он продолжал устанавливать параметры в базе данных?)
Я вошел в систему через psql и выполнил те же команды, и это сработало. Может быть, я сделал что-то не так, но это может помочь другим, если они тоже делают что-то не так 🙂
Источник: askdev.ru
search_path
Эта переменная определяет порядок, в котором будут просматриваться схемы при поиске объекта (таблицы, типа данных, функции и т. д.), к которому обращаются просто по имени, без указания схемы. Если объекты с одинаковым именем находятся в нескольких схемах, использоваться будет тот, что встретится первым при просмотре пути поиска. К объекту, который не относится к схемам, перечисленным в пути поиска, можно обратиться только по полному имени (с точкой), с указанием содержащей его схемы.
Значением search_path должен быть список имён схем через запятую. Если для имени, указанного в этом списке, не находится существующая схема, либо пользователь не имеет права USAGE для схемы с этим именем, такое имя просто игнорируется.
Если список содержит специальный элемент $user , вместо него подставляется схема с именем, возвращаемым функцией SESSION_USER , если такая схема существует и пользователь имеет право USAGE для неё. (В противном случае элемент $user игнорируется.)
Схема системных каталогов, pg_catalog , просматривается всегда, независимо от того, указана она в пути или нет. Если она указана в пути, она просматривается в заданном порядке. Если же pg_catalog отсутствует в пути, эта схема будет просматриваться перед остальными элементами пути.
Аналогично всегда просматривается схема временных таблиц текущего сеанса, pg_temp_ nnn , если она существует. Её можно включить в путь поиска, указав её псевдоним pg_temp pg_temp . Если она отсутствует в пути, она будет просматриваться первой (даже перед pg_catalog ). Временная схема просматривается только при поиске отношений (таблиц, представлений, последовательностей и т. д.) и типов данных, но никогда при поиске функций и операторов.
Когда объекты создаются без указания определённой целевой схемы, они помещаются в первую пригодную схему, указанную в search_path . Если путь поиска схем пуст, выдаётся ошибка.
По умолчанию этот параметр имеет значение «$user», public . При таком значении поддерживается совместное использование базы данных (когда пользователи не имеют личных схем, все используют схему public ), использование личных схем, а также комбинация обоих вариантов. Другие подходы можно реализовать, изменяя значение пути по умолчанию, либо глобально, либо индивидуально для каждого пользователя.
Более подробно обработка схем описана в 6 . В частности, стандартная конфигурация схем подходит только для баз данных с одним пользователем или с взаимно доверяющими пользователями.
Текущее действующее значение пути поиска можно получить, воспользовавшись SQL -функцией current_schemas (см. 4 ). Это значение может отличаться от значения search_path , так как current_schemas показывает, как были преобразованы элементы, фигурирующие в search_path .
Рекомендации [EN]
Most DBAs either use the default or set search_path on a ROLE or database object basis. The one reason to set it in postgresql.conf is if you are taking the security step of removing the special «public» schema in order to lock down your database.
На StackOverflow
- What exactly means the collation ‘de-DE-u-kn-true’
- De-Identifying PHI For HIPAA
- Lazily (de-)serialize JSON with EF Core
- Connect to a heroku database with pgadmin
- Get breakdown from de-normalized SQL table
Источник: postgresqlco.nf