postgresql参数配置是在$PGDATA下的postgresql.conf文件中,有时候也会在postgresql.auto.conf文件中,后者优先级更高。
backend:可以在postgresql.conf中对这些设置进行更改,而无需重新启动服务器。但新的配置值只会出现在这之后的连接中,在已有的连接中,这些值不会改变。只需要向postmaster进程发送一个SIGHUP信号,让其重新读取配置文件即可(该分类有点类似于Oracle里面的动态参数)。$ pg_ctl reload -D $PGDATA(DATA目录)
user:该类参数表示,普通用户可以通过set命令来更改参数的配置值。
internal:该类参数是内部参数,也就是说,不可以进行修改,除非重新initdb。
postmaster:该类参数更改配置项后,需要重启PostgreSQL实例才能生效。类似于Oracle里面的静态参数。
superuser:该类参数可以由超级用户来改变,改变时,只会影响到自身的session,不会影响到其他的用户。
sighup:在postgresql.conf配置文件中更改这种类型的参数无须重启实例,只需要向postmaster进程发送一个SIGHUP信号,让其重新读取配置文件即可。postmaster进程收到信号后,也会向其他子进程发送SIGHUP信号,让新的参数值在其他子进程中也生效。该类参数区别于backend类参数。
superuser-backend:该类参数可以由超级用户来改变,可以在postgresql.conf中对这些设置进行更改,而无需重新启动服务器。但新的配置值只会出现在这之后的连接中,在已有的连接中,这些值不会改变。
查看参数
postgres=# SELECT name, setting, unit,context FROM pg_settings WHERE name like '%buffer%'; name | setting | unit | context ----------------+---------+------+------------ shared_buffers | 16384 | 8kB | postmaster temp_buffers | 1024 | 8kB | user wal_buffers | 512 | 8kB | postmaster postgres=# show shared_buffers; shared_buffers ---------------- 128MB (1 row)
修改user类型的参数
postgres=# set temp_buffers='12MB'; SET postgres=# SELECT name, setting, unit,context FROM pg_settings WHERE name like '%buffer%'; name | setting | unit | context ----------------+---------+------+------------ shared_buffers | 16384 | 8kB | postmaster temp_buffers | 1536 | 8kB | user wal_buffers | 512 | 8kB | postmaster (3 rows)
修改sighup类型的参数
postgres=# alter system set log_checkpoints = on; ALTER SYSTEM postgres=# SELECT name, setting, unit,context FROM pg_settings WHERE name like 'log_checkpoints'; name | setting | unit | context -----------------+---------+------+--------- log_checkpoints | off | | sighup (1 row) postgres=# SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) postgres=# SELECT name, setting, unit,context FROM pg_settings WHERE name like 'log_checkpoints'; name | setting | unit | context -----------------+---------+------+--------- log_checkpoints | on | | sighup root@scutech:/var/lib/postgresql/12/main# cat postgresql.auto.conf # Do not edit this file manually! # It will be overwritten by the ALTER SYSTEM command. log_checkpoints = 'on'
可以看到修改了参数在postgresql.auto.conf 中保存
另外两种reload的方式是:
用UNIX的kill手动发起HUP信号 $kill -HUP PID
用pg_ctl命令触发SIGHUP信号 $pg_ctl reload