Eu posso ver a corrente search_path
com:
show search_path ;
E eu posso definir o search_path
para a sessão atual com:
set search_path = "$user", public, postgis;
Além disso, posso definir permanentemente o search_path
para um determinado banco de dados com:
alter database mydb set search_path = "$user", public, postgis ;
E posso definir permanentemente o search_path
para uma determinada função (usuário) com:
alter role johnny set search_path = "$user", public, postgis ;
Mas eu gostaria de saber como determinar quais são as configurações do banco de dados e da funçãosearch_path
(com relação a ) antes de alterá-las?
Você pode encontrar as definições de configuração para funções e bancos de dados na tabela de catálogo
pg_db_role_setting
.Esta consulta recupera quaisquer configurações para uma determinada função ou banco de dados:
Se nada for definido, a próxima instância inferior determinará o estado padrão do
search_path
, que épostgresql.conf
neste caso ou opções de linha de comando na inicialização do servidor. Relacionado:Para anular quaisquer configurações de uma função ou banco de dados -
search_path
neste exemplo específico:Ou:
Ou:
Nunca manipule dados no catálogo do sistema (
pg_catalog.*
) manualmente. Use os comandos DDL conforme instruído no manual paraALTER ROLE
eALTER DATABASE
.Essencialmente, o
RESET
comando exclui uma linha depg_db_role_setting
permitir que a configuração básica entre em vigor novamente. Eu não chamaria isso de complicado.As configurações permanentes para bancos de dados e funções são armazenadas na tabela de todo o cluster do sistema pg_db_role_settings .
Somente as configurações passadas para
ALTER USER
eALTER DATABASE
estão presentes nesta tabela. Para obter os valores configurados além desses comandos:O valor da configuração antes de qualquer alteração, inclusive no nível do cluster (por meio da configuração global
postgresql.conf
) pode ser consultado no banco de dados com:O valor da configuração anterior a qualquer alteração na sessão (através do
SET
comando) pode ser consultado no banco de dados com:Quando é definido um valor não padrão em
postgresql.conf
, não é simples obter esse valor em SQL independentemente da sessão atual .pg_settings.boot_val
não funcionará porque ignora as alterações no arquivo de configuração epg_settings.reset_val
também não, porque é influenciado pelas configurações do banco de dados/usuário potencialmente definidas por meio doALTER USER/ALTER DATABASE
. A maneira mais simples para um DBA obter o valor é apenas procurá-lo nopostgresql.conf
. Caso contrário, consulte Redefinir search_path para o padrão global do cluster, que aborda esse tópico em detalhes.Verdadeiro para postgres e Redshift. Isso parece muito simples em comparação com as respostas anteriores que dependem de
pg_db_role_setting
, mas auseconfig
coluna terá uma lista de configurações de usuário incluindosearch_path
, formatada como uma lista.A documentação do pg_user Postgres está aqui
Para ser mais seletivo:
Acho que essa tabela de usuários contém todos os usuários no cluster, não apenas o banco de dados específico - mas não verifiquei isso.