我的PostgreSQL配置参数来自哪里?

8 阅读2分钟

我的PostgreSQL配置参数来自哪里?

摘要: 本文解释了PostgreSQL配置参数的层级顺序,展示了不同配置级别如何相互覆盖,以及如何使用pg_settings视图识别当前生效的配置参数。

原文链接


PostgreSQL有大量的配置参数,这既是好事(你真的可以按自己的需要修改),也是坏事(新手会被这些选择搞昏)。除此之外,改变参数的方式也有好几种,如果你改错了地方,你的修改可能根本不会生效!

配置参数覆盖规则

下图展示了设置参数的不同方式以及它们如何相互覆盖。

image.png

因此,应用到会话级别的设置会覆盖在数据库级别、角色级别或任何配置文件中设置的值。

我还添加了你可能需要在不同级别修改参数时使用的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中的拼写错误、端口错误等)导致无法连接,而你看了三遍都没发现问题,可能是因为参数在某个你没想到的地方被覆盖了。

下面是帮助你的图表:

image.png

如果你在使用Debian,pg_conftool可能对你有帮助!