如果我做对了,设置是分层的:
postgres.conf->
postgres.auto.conf (ALTER SYSTEM)->
ALTER DATABASE(where applicable)->
ALTER USER(where applicable)->
SET SESSION(where applicable)->
SET LOCAL(where applicable)
假设我已经enable_seqscan
设定off
在某个时候。SHOW
或current_setting(
或pg_settings
只会显示当前值。但是要检查为什么我关闭它,我必须检查整个链条。例如,我怀疑有人为每个用户或每个数据库设置了它,或者auto.conf
- 为了找到设置的宽度,我必须检查所有的设置。否则重置值可能会失败,例如:
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)
因为对于用户 vao 或数据库 vao 或更深层次的...
找到当前值的主要来源的简短方法是什么?..或者最好是设置的所有来源的矩阵。是否有任何界面或猴子黑客?
更新以反映出色的 Abelisto 回答:
source, sourcefile from pg_settings
是一个很好的信息来源,但出于这些原因,我仍然要求使用一种猴子方式来检查:要查看database
或user
在source
我必须重新登录 - 显然。所以在它们实际应用于会话之前,我无法检查它们。本地和会话集同时显示 SESSION(这也很合理),最后我仍然必须逐步将所有层次结构重置为默认值。例如:
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)
因此,如果我不检查每个来源,我的更改就不会得到尊重。
pg_settings
- 寻找source*
例如,之后
(并重新加载配置)
更新 并且有获取数据库/角色设置的查询,无需重新登录:
可能的结果: