PostgreSQL的系统视图pg_file_settings
pg_file_settings
是 PostgreSQL 中一个非常有用的系统视图,它提供了有关当前服务器配置文件 (postgresql.conf
) 中设置的参数的信息。此视图显示了配置文件中每个参数的原始设置,当前有效值,以及是否存在错误或警告。
1. pg_file_settings
视图的结构
该视图包含以下字段:
- sourcefile: 参数所在的配置文件的路径。
- sourceline: 参数在配置文件中的行号。
- seqno: 参数的顺序编号,用于区分
include
配置文件的多个条目。 - name: 参数的名称。
- setting: 参数在配置文件中的设置值。
- applied: 布尔值,表示是否已成功应用该设置。
- error: 如果有错误消息,表示错误的相关信息。
2. 使用示例
查询所有配置设置
要查看当前配置文件中所有参数的设置,请执行以下查询:
postgres=# SELECT * FROM pg_file_settings;
sourcefile | sourceline | seqno | name | setting | applied | error
--------------------------------------+------------+-------+--------------------------------+----------------------------------------------------------------------+---------+-------
/home/pg16/data/postgresql.conf | 60 | 1 | listen_addresses | * | t |
/home/pg16/data/postgresql.conf | 64 | 2 | port | 5777 | t |
/home/pg16/data/postgresql.conf | 65 | 3 | max_connections | 100 | t |
/home/pg16/data/postgresql.conf | 67 | 4 | superuser_reserved_connections | 3 | t |
/home/pg16/data/postgresql.conf | 130 | 5 | shared_buffers | 256MB | t |
/home/pg16/data/postgresql.conf | 132 | 6 | huge_pages | on | t |
/home/pg16/data/postgresql.conf | 153 | 7 | dynamic_shared_memory_type | posix | t |
/home/pg16/data/postgresql.conf | 211 | 8 | wal_level | replica | t |
/home/pg16/data/postgresql.conf | 247 | 9 | max_wal_size | 1GB | t |
。。。省略。。。
查询配置文件中未应用的设置
有时,某些参数设置可能会由于语法错误、无效值或其他原因而不能被应用。可以使用以下查询来查找这些未成功应用的设置:
postgres=# SELECT * FROM pg_file_settings WHERE NOT applied;
sourcefile | sourceline | seqno | name | setting | applied | error
---------------------------------+------------+-------+--------------------------+------------------------------------------------+---------+-------
/home/pg16/data/postgresql.conf | 749 | 37 | shared_preload_libraries | pg_stat_kcache,pg_stat_statements,auto_explain | f |
(1 row)
3. 修改和重新加载配置
如果发现某些参数设置有误,可以按照以下步骤进行修改和重新加载配置:
修改配置文件:
例如,编辑 /home/pg16/data/postgresql.conf
文件,修正错误的参数:
vi /home/pg16/data/postgresql.conf
重新加载配置
在修改配置文件之后,可以使用以下命令重新加载配置,使修改生效:
pg_ctl reload
或者在 PostgreSQL 交互式命令行(psql)中执行以下命令:
SELECT pg_reload_conf();
4. 其他相关视图
- pg_settings: 提供当前会话所有配置参数的视图,以及它们的当前值、描述和其它信息。与
pg_file_settings
不同的是,pg_settings
显示的是当前会话中生效的参数。
SELECT * FROM pg_settings;
示例输出:
name | setting | unit | category | short_desc | context | vartype | source | min_val | max_val | enumvals | boot_val | reset_val | sourcefile | sourceline | pending_restart
---------------+---------+-------+---------------------------------------+------------------------------+------------+---------+---------+---------+----------+----------+----------+-----------+------------+-------------+-----------------
max_connections | 20 | | Connections and Authentication / Connections | Sets the maximum number of concurrent connections.| postmaste | integer | config | 1 | 262.14 | | 100 | 100 | /etc/postgresql/13/main/postgresql.conf | 57 | f
shared_buffers | 512 | kB | Resource Usage / Memory | Sets the number of shared memory buffers used by the server. | postmaster | integer | config | 16 | 107374 | | 128 | 128/group | postgres | 58 | f
总结
pg_file_settings
提供了一个查看 PostgreSQL 配置文件中参数设置及其应用状态的视图。- 可以利用该视图检查配置设置是否应用成功,如果有错误信息,可以根据提示进行修改。
- 修改配置文件后,可以使用
pg_reload_conf()
函数或系统命令重新加载配置,使修改生效。 - 配合
pg_settings
视图,可以更全面地了解数据库的配置状态。