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;
Também 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 de banco de dados e função (em relação a search_path
) antes de alterá-las?
fonte
alter role myrole set search_path = "$user", public, postgis ;
, notei quepg_roles.rolconfig
(correspondendo ao meu papel) obtive o valor{"search_path=\"$user\", public, postgis"}
. Além disso,select * from pg_db_role_setting ;
agora mostra uma linha adicional. E depois da execuçãoalter database mydb set search_path = "$user", public, postgis ;
, vejo uma linha correspondenteselect * from pg_db_role_setting ;
- no final, não tenho certeza de como "desfazer" essas alterações.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 configurações alteradas estão presentes. Se o caminho de pesquisa nunca foi modificado para um banco de dados ou uma função, acho que pode ser
"$user",public
.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 (por meio do
SET
comando) pode ser consultado no banco de dados com:Quando é definido um valor não padrão
postgresql.conf
, não é fácil obter esse valor no SQL independentemente da sessão atual .pg_settings.boot_val
não funciona porque ignora alterações no arquivo de configuração epg_settings.reset_val
também não, porque é influenciado pelas configurações de banco de dados / usuário potencialmente definidasALTER USER/ALTER DATABASE
. A maneira mais simples de um DBA obter o valor é apenas pesquisá-lopostgresql.conf
. Caso contrário, consulte Redefinir o caminho da pesquisa para o padrão global do cluster, que aborda este tópico em detalhes.fonte
boot_val
realmente o padrão de fábrica compilado, não é a configuraçãopostgresql.conf
?reset_val
vez deboot_val
.reset_val
. Me deparei com essa questão de idade pesquisando este recente: dba.stackexchange.com/questions/145280/...Verdadeiro para postgres e Redshift. Isso parece simples demais em comparação com as respostas anteriores das quais dependem
pg_db_role_setting
, mas auseconfig
coluna terá uma lista de configurações do usuáriosearch_path
, incluindo , formatada como uma lista.pg_user A documentação do Postgres está aqui
Para ser mais seletivo:
Acho que esta tabela de usuários contém todos os usuários do cluster, não apenas o banco de dados específico - mas não verifiquei isso.
fonte