Digamos que eu altere permanentemente meu banco de dados search_path
assim:
ALTER DATABASE my_db SET search_path TO "$user",public,other_schema;
Como posso redefini-lo para qualquer padrão que um banco de dados intocado e inalterado neste cluster teria?
Isso geralmente é "$user",public
, mas pode ser alterado no arquivo de configuração . Ter uma maneira de ler o valor dos parâmetros provenientes do arquivo de configuração funcionaria (para que eu pudesse criar uma consulta dinâmica na pior das hipóteses), mas não tive sorte em encontrar nada do tipo.
Padrões de fábrica
Você pode ler
boot_val
depg_settings
, mas na verdade é o padrão de fábrica compilado, não a configuração depostgresql.conf
.Você não está negligenciando o simples
RESET
?Para apenas redefinir a configuração (removê-la), você pode simplesmente:
Mas isso não necessariamente dá a você o que "um banco de dados intocado e inalterado neste cluster teria" . Ele apenas remove a configuração personalizada do banco de dados. Existem várias maneiras de definir o caminho de pesquisa:
E isso não altera a
search_path
sua sessão atual . O efeito (se houver) é visível na sua próxima sessão.Relacionado:
Conectar a
template1
Você pode obter a configuração atual de uma conexão para
template1
, como @Abelisto sugeriu . Mas você provavelmente deseja permanecer em sua sessão atual. Você poderia usar dblink para isso:Isso tem alguns desafios :
Você precisa do módulo adicional
dblink
instalado. Isso é simples:Inserções persistentes em um UDF mesmo se a função for abortada
Você precisa do privilégio para se conectar a
template1
. E você precisa fornecer a senha do usuário.Mesmo na
template1
configuração pode resultar de configurações para a função ou banco de dados (ou outra instância) também (mesmo que provavelmente não o façam). Portanto, verifique as colunassource
. Se disser 'padrão' , você entendeu. Se diz 'banco de dados' ou 'usuário' você está de volta ao quadrado 1...Leia a configuração real em
postgresql.conf
.. usando
pg_read_file()
, mas isso também está sujeito a algumas restrições importantes . O manual :E:
Ênfase em negrito minha.
Se seus arquivos de configuração estiverem em outro lugar (como em instalações padrão no Debian e amigos), você terá que criar um link simbólico no sistema de arquivos em seu diretório de dados ou log para seu arquivo de configuração real.
Observe como busco o caminho para o arquivo de configuração dinamicamente com:
Então eu uso uma expressão regular com substring() para extrair a configuração:
Isso deve funcionar, mas não gastei muito tempo para tornar o regexp à prova de balas. Pode ser enganado por uma configuração comentada que corresponde primeiro ou algo assim. Você pode querer testar um pouco mais.
Por fim, desde o Postgres 9.4, existe também o
ALTER SYSTEM
comando para substituir as configurações em umpostgresql.auto.conf
arquivo. Você terá que verificar isso também.