Se eu acertar, as configurações são hierárquicas:
postgres.conf->
postgres.auto.conf (ALTER SYSTEM)->
ALTER DATABASE(where applicable)->
ALTER USER(where applicable)->
SET SESSION(where applicable)->
SET LOCAL(where applicable)
digamos que eu tenha enable_seqscan
definido para off
em algum momento. SHOW
ou current_setting(
ou pg_settings
me mostrará apenas o valor atual. Mas para verificar por que estou com isso, tenho que verificar toda a cadeia. Por exemplo, eu suspeito que alguém o configurou por usuário ou por banco de dados, ou em auto.conf
- para descobrir quão ampla é a configuração, tenho que verificar todos. Caso contrário, a redefinição do valor pode falhar, por exemplo:
vao=# show enable_seqscan;
enable_seqscan
----------------
off
(1 row)
vao=# set enable_seqscan to default;
SET
vao=# show enable_seqscan;
enable_seqscan
----------------
off
(1 row)
Porque é assim para o usuário vao, ou para o banco de dados vao, ou mais profundo...
Qual é uma maneira curta de encontrar a fonte primária do valor atual?.. Ou, de preferência, a matriz de todas as fontes para a configuração. Existe alguma interface ou hack de macaco?
atualização para refletir a brilhante resposta de Abelisto:
source, sourcefile from pg_settings
é uma fonte maravilhosa de informação, ainda estou pedindo uma maneira de verificar por esses motivos: para ver o ou database
eu tenho que fazer login novamente - obviamente. Portanto, antes que eles sejam realmente aplicados à sessão, não posso verificá-los. local e session set mostra tanto SESSION (que tipo de razoável também) e por último ainda tenho que redefinir para o padrão passo a passo toda a hierarquia. Por exemplo:user
source
vao=# select setting, source, sourcefile from pg_settings where name = 'enable_seqscan';
setting | source | sourcefile
---------+----------+------------
off | database |
(1 row)
vao=# select * from pg_file_settings where name = 'enable_seqscan';
sourcefile | sourceline | seqno | name | setting | applied | error
---------------------------------------------------+------------+-------+----------------+---------+---------+-------
/etc/postgresql/9.6/main/a | 1 | 1 | enable_seqscan | off | f |
/var/lib/postgresql/9.6/main/postgresql.auto.conf | 3 | 26 | enable_seqscan | on | t |
(2 rows)
Portanto, se eu não verificar todas as fontes, minhas alterações não poderão ser respeitadas.
pg_settings
- olhe parasource*
Por exemplo, depois
(e recarregando a configuração)
Update E há a consulta para obter as configurações de db/role, sem necessidade de novo login:
Resultado possível: