Настройка search_path в дампе sql

В дампе psql из базы данных, использующей pg_dump версии 11.4, search_path устанавливается следующим образом:

SELECT pg_catalog.set_config('search_path', '', false); 

Я пытаюсь использовать другую схему (то есть не public) и сделать эту новую схему по умолчанию для конкретной роли, установив search_path. Другими словами:

ALTER ROLE myrole IN DATABASE mydatabase SET search_path TO myschema,public;

В настоящее время, несмотря на то, что я могу войти в psql в качестве этой роли и убедиться, что search_path был установлен с помощью SELECT * FROM current_setting('search_path');, я не могу экспортировать это изменение в дамп, что означает, что я должен предположить, что он был установлен правильно.

Однако я бы хотел, чтобы это было сделано как команда в файле дампа с использованием pg_dump, а не устанавливалось самостоятельно в psql и неявно предполагалось, что оно установлено правильно. Можно ли это сделать? Есть ли в pg_dump настройка, которую я пропустил?


person Daniel Soutar    schedule 22.07.2019    source источник
comment
Люди могут счесть полезным вызывать psql как PGOPTIONS=--search_path=some_schema psql . Через: dba.stackexchange.com/a/171964/45101   -  person blong    schedule 08.03.2021


Ответы (1)


Роли (пользователи) являются глобальными для экземпляра Postgres (он же «кластер», он же «каталог данных») и являются общими для всех баз данных в этом экземпляре.

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

Чтобы увидеть изменения для вашей роли, вам нужно сбросить «глобальные значения», используя pg_dumpall

pg_dumpall --globals-only -f globals.sql
person a_horse_with_no_name    schedule 22.07.2019
comment
Что если я попытаюсь выполнить эту команду для роли на другом сервере, где я не работаю с правами root? Кажется, эта команда требует определенных привилегий, которых нет у моей роли. - person Daniel Soutar; 23.07.2019
comment
Как насчет ALTER DATABASE ... SET search_path ...? Почему его тоже не сбрасывают? - person Konstantin Pelepelin; 21.10.2019