所有配置参数的名称均大小写不敏感。每个参数的取值归属于以下五种基本类型之一:布尔型、字符串型、整型、浮点型或枚举型(enum)。
布尔型:
可以书写为 on、off、true、false、yes、no、1、0(大小写不敏感)。
字符串型: 通常使用单引号包裹,若字符串内包含单引号需双写单引号转义。对于纯数字或简单标识符,单引号可以省略。
数值型(整型与浮点型):
整型参数支持十进制、十六进制(0x 前缀)与八进制(0o 前缀)输入。支持在数字之间插入下划线进行视觉分组。
带单位的数值型:
表示内存容量或时间长度的数值参数支持显式声明单位。内存单位支持 B、kB、MB、GB 与 TB(换算乘数为 1024)。时间单位支持 us(微秒)、ms(毫秒)、s(秒)、min(分钟)、h(小时)与 d(天)。带单位的值必须作为字符串使用单引号包裹,例如 '128MB'、'15min'。
枚举型: 取值严格限制在一组受限的预定义字符串清单内,取值大小写不敏感。
最基础的配置方式是直接编辑数据目录下的主配置文件 postgresql.conf。每行配置一条参数,格式通常为 name = value,井号(#)代表单行注释。
当主服务进程收到 SIGHUP 信号时,会重新读取配置文件并实现配置热重载(可以通过命令行运行 pg_ctl reload 或在 SQL 中执行 pg_reload_conf() 触发)。主进程会自动将信号级联广播给所有正在活跃运行的子会话,使其平滑应用新配置。某些底层核心参数(标记为必须重启生效的参数)无法通过热重载生效,必须完整重启实例。
此外,数据目录下还存在由系统自动维护的配置文件 postgresql.auto.conf。它用于存放通过 SQL 命令 ALTER SYSTEM 动态修改的配置参数。该文件的优先级严格高于手动编辑的 postgresql.conf。
除 ALTER SYSTEM 外,还支持以下细粒度配置命令:
ALTER DATABASE:为指定数据库绑定专属默认参数。
ALTER ROLE:为指定角色用户绑定专属默认参数。
SET:在当前会话内部临时修改参数(仅对当前连接有效)。
在启动主服务时,可以通过 postgres 命令的 -c 选项直接传递单次运行配置参数,例如:
postgres -c log_connections=yes -c log_destination='syslog'
环境变量 PGOPTIONS 同样支持由客户端向服务端透传运行时配置选项。
查看当前会话的生效参数:
SHOW work_mem; SHOW ALL;
或通过查询系统目录视图 pg_settings 获取各参数的数据类型、当前值、默认值、上下文生效级别(如内部参数、必须重启、仅超级用户可修改、普通用户可修改)以及详细说明。