ALTER SYSTEM

用于修改 PostgreSQL 配置的 SQL 命令

ALTER SYSTEM 是一个用于在数据库会话中修改 PostgreSQL 配置的实用命令。

ALTER SYSTEMPostgreSQL 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 中移除该配置参数。

无法将该命令包装在事务或 security definer 函数中。

禁用 ALTER SYSTEM

PostgreSQL 17 开始,可以通过 allow_alter_system 配置选项禁用 ALTER SYSTEM 命令的执行。

源代码

ALTER SYSTEMsrc/backend/utils/misc/guc.c 中的函数 AlterSystemSetConfigFile() 处理。

变更历史

示例

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 中其他地方为该参数指定的值(如果未设置,则为参数的默认设置)将被应用。

分类

Configuration, SQL command, Utility command

另请参阅

postgresql.conf, postgresql.auto.conf, pg_reload_conf(), allow_alter_system

反馈

提交对“ALTER SYSTEM”的任何评论、建议或更正 在此处