ALTER SYSTEM
是一个实用程序命令,用于在数据库会话中修改PostgreSQL配置。
ALTER SYSTEM
在 PostgreSQL 9.4 中添加。
注意事项
ALTER SYSTEM
只能由超级用户执行。无法授予非超级用户执行 ALTER SYSTEM
的权限;但是,从 PostgreSQL 15 开始,可以将修改单个 配置参数 的权限授予非超级用户。
ALTER SYSTEM
不会检查修改的 GUC 的有效性;与手动修改 postgresql.conf 一样,将在重新加载配置时检查设置。
如果使用 ALTER SYSTEM
将 配置参数 的值设置为 'DEFAULT'
(例如 log_error_verbosity
),则必须将该值括在单引号中,否则 ALTER SYSTEM
将将其解释为 ALTER SYSTEM SET ... TO DEFAULT
,这会完全从 postgresql.auto.conf
中删除配置参数。
无法将该命令包装在事务或安全定义器函数中。
禁用ALTER SYSTEM
从 PostgreSQL 17 开始,可以通过 allow_alter_system
配置选项禁用 ALTER SYSTEM
命令的执行。
源代码
ALTER SYSTEM
由 src/backend/utils/misc/guc.c 中的 AlterSystemSetConfigFile()
函数处理。
更改历史
- PostgreSQL 17
- 现在可以设置无法识别的自定义 GUC(提交 2d870b4a)
- 现在可以通过GUC
allow_alter_system
禁用(提交 d3ae2a24)
- PostgreSQL 15
- PostgreSQL 9.5
- 语句现在记录为
log_statement=ddl
而不是log_statement=all
(提交 43bed84c)
- 语句现在记录为
- PostgreSQL 9.4
- 添加(提交 65d6e4cb)
示例
ALTER SYSTEM
的基本用法示例
postgres=# SHOW log_statement; log_statement --------------- none (1 row) postgres=# ALTER SYSTEM SET log_statement = 'all'; ALTER SYSTEM postgres=# SHOW log_statement; log_statement --------------- none (1 row) postgres=# SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) postgres=# SHOW log_statement; log_statement --------------- all (1 row)
postgresql.auto.conf
将(假设之前未通过 ALTER SYSTEM
修改)如下所示
postgres=# SELECT pg_read_file(setting || '/postgresql.auto.conf') FROM pg_settings WHERE name = 'data_directory'; pg_read_file ------------------------------------------------------- # Do not edit this file manually! + # It will be overwritten by the ALTER SYSTEM command.+ log_statement = 'all' + (1 row)
将 DEFAULT
指定为配置参数的字面值将从 postgresql.auto.conf
中删除它。
postgres=# ALTER SYSTEM SET log_statement = DEFAULT; ALTER SYSTEM postgres=# SELECT pg_read_file(setting || '/postgresql.auto.conf') FROM pg_settings WHERE name = 'data_directory'; pg_read_file ------------------------------------------------------- # Do not edit this file manually! + # It will be overwritten by the ALTER SYSTEM command.+ (1 row)
在下次重新加载配置时,将应用在 postgresql.conf 中其他位置为该参数指定的值,或者如果未设置,则应用该参数的默认设置。
参考
- PostgreSQL文档: ALTER SYSTEM