Я могу видеть ток search_path
с:
show search_path ;
И я могу установить search_path
для текущего сеанса с:
set search_path = "$user", public, postgis;
Кроме того, я могу навсегда установить search_path
для данной базы данных с помощью:
alter database mydb set search_path = "$user", public, postgis ;
И я могу навсегда установить search_path
для данной роли (пользователя) с помощью:
alter role johnny set search_path = "$user", public, postgis ;
Но я хотел бы знать, как определить параметры базы данных и роли (относительно search_path
) до их изменения?
источник
alter role myrole set search_path = "$user", public, postgis ;
я заметил, чтоpg_roles.rolconfig
(в соответствии с моей ролью) получил значение{"search_path=\"$user\", public, postgis"}
. Такжеselect * from pg_db_role_setting ;
теперь отображается дополнительная строка. И после выполненияalter database mydb set search_path = "$user", public, postgis ;
я вижу соответствующую строку вselect * from pg_db_role_setting ;
- в конце я не уверен, как "отменить" эти изменения.Постоянные настройки для баз данных и ролей хранятся в системной таблице pg_db_role_settings .
Только измененные настройки присутствуют. Если путь поиска никогда не изменялся для базы данных или роли, я предполагаю, что это можно предположить
"$user",public
.Значение параметра до любого изменения, в том числе на уровне кластера (через глобальную конфигурацию
postgresql.conf
), можно запросить из базы данных с помощью:Значение параметра до любого изменения в сеансе (через
SET
команду) можно запросить из базы данных с помощью:Когда для него установлено значение, отличное от значения по умолчанию
postgresql.conf
, получить это значение в SQL не просто, независимо от текущего сеанса .pg_settings.boot_val
не будет делать, потому что он игнорирует изменения в файле конфигурации, иpg_settings.reset_val
не будет, потому что на него влияют параметры базы данных / пользователя, которые могут быть установлены черезALTER USER/ALTER DATABASE
. Простейший способ получить это значение для администратора базы данных - просто просмотреть егоpostgresql.conf
. В противном случае см. Сброс search_path к глобальному кластерному значению по умолчанию, которое подробно описывает эту тему.источник
boot_val
самом деле не скомпилировано заводское значение по умолчанию, а не настройкаpostgresql.conf
?reset_val
вместоboot_val
.reset_val
. Я наткнулся на этот старый вопрос, исследуя этот недавний вопрос: dba.stackexchange.com/questions/145280/…Правда для Postgres и Redshift. Это кажется слишком простым по сравнению с предыдущими ответами, от которых зависит
pg_db_role_setting
, но вuseconfig
столбце будет список пользовательских настроек, в том числеsearch_path
, отформатированный в виде списка.pg_user Документация Postgres находится здесь
Чтобы быть более избирательным:
Я думаю, что эта таблица пользователей содержит всех пользователей в кластере, а не только конкретные базы данных - но я не проверял это.
источник