我的PostgreSQL配置参数来自哪里?
摘要: 本文解释了PostgreSQL配置参数的层级顺序,展示了不同配置级别如何相互覆盖,以及如何使用pg_settings视图识别当前生效的配置参数。
PostgreSQL有大量的配置参数,这既是好事(你真的可以按自己的需要修改),也是坏事(新手会被这些选择搞昏)。除此之外,改变参数的方式也有好几种,如果你改错了地方,你的修改可能根本不会生效!
配置参数覆盖规则
下图展示了设置参数的不同方式以及它们如何相互覆盖。
因此,应用到会话级别的设置会覆盖在数据库级别、角色级别或任何配置文件中设置的值。
我还添加了你可能需要在不同级别修改参数时使用的SQL命令。
我如何知道哪个生效?
当然,你可以为所有级别设置不同的值来了解哪个会生效,但有一个更好的方法来查找:pg_settings。
pg_settings是一个视图,对查找配置参数信息非常有用。通过这个视图,你能够确定参数来自哪里,如果来自文件,它还会显示文件路径和行号!
例如:
laetitia=# select name, source, sourcefile, sourceline from pg_settings where name = 'shared_buffers';
name | source | sourcefile | sourceline
----------------+--------------------+-----------------------------------------+------------
shared_buffers | configuration file | /etc/postgresql/12/main/postgresql.conf | 11
(1 row)
如果无法连接怎么办?
好吧,如果由于配置参数值错误(如postgresql.conf中的拼写错误、端口错误等)导致无法连接,而你看了三遍都没发现问题,可能是因为参数在某个你没想到的地方被覆盖了。
下面是帮助你的图表:
如果你在使用Debian,pg_conftool可能对你有帮助!