$ pg_ctl reload
或者在psql中执行:
select pg_reload_conf();
通过查询pg_settings,可以了解使参数更改生效是否需要服务器重启:
highgo=# select distinct context from pg_settings;
context
------------
backend
user
internal
postmaster
superuser
sighup
(6 rows)
如果context提到了postmaster,那么集群的重启就是需要的;然而如果contexxt包括singup,重新加载pg_ctl即可。例如:
highgo=# select name,context from pg_settings where name in ('archive_command','port');
name | context
-----------------+------------
archive_command | sighup
port | postmaster
(2 rows)
检查配置文件位置:
highgo=# show config_file;
config_file
----------------------------------------------
/hgdata/highgo/HighGoDB/data/postgresql.conf
(1 row)
在某些情况下,设置了一个无效的参数值,postgresql会忽略合格值并继续使用默认值。
postgresql没有自带的验证器。我们必须检查并确保新值已生效。
使用数据库超级用户alter system set 参数=参数值;的方式修改参数后,新的参数(值)记录到postgresql.auto.conf中。
postgresql.conf---- postgresql.auto.conf
PG中没有scope的关键字,并且也没有提示生效的时候,这是不够人性化的地方。
但是只要是需要下次重启生效的,都会写入到auto文件
如果postgresql.conf和postgresql.auto.conf中都有同一参数,但参数值不同,则psotgresql.auto.conf中的参数值时生效;如若修改,也应该修改psotgresql.auto.conf中的参数。
如果postgresql.conf和postgresql.auto.conf中都有同一参数,更改postgresql.conf后重启或者reload不会生效。
各参数含义:
internal;这些参数是只读参数,其中有些参数是postgres程序写死的,或者是用一些不同的编辑选项确定的;有些参数是数据库实例初始化时就确定了的,比如创建实例时在运行initdb,可以使用一些命令行参数选项来确定相应参数的值,比如,可以在initdb中使用-k把参数“data_checksums”初始化为“on”,但之后就不能再改变此参数值了。这些参数 值不能配置在postgresql.conf中,因为它们是由postgres程序和在初始化实例时写死的。
postmaster:改变这些参数值需要重启postgresql实例。在postgresql.conf中改变这些参数后,需要重启数据库实例才能生效。
singup:在postgresql.conf中改变这些参数后,不需要重启数据库实例,只需要向postmaster进程发送SINGUP信号,让其重启装载配置新的参数值就可以了。postmaster进程接收到SINGUP信号后,也会向它的子进程发送SINGUP信号,让新的参数值在所有的进程中都生效。
backend:在postgresql.conf中更改这些设置无需重启数据库服务,只需要向postmaster进程发送SINGUP信号,让其重启装载配置新的参数值就可以了。但新的配置值只会出现在这之后的新的连接中,在已有的连接中,这些参数的值不会改变。这个参数的值也可以在新建连接时,由连接的一些参数改变。例如,通过libpq的PGOPTIONS环境变量就可以改变本连接的配置值。
superuser;这类参数可以由超级用户使用set来改变,比如检测死锁超时时间的参数“deadlock_timeout”。而超级用户改变此参数值时,只会影响自身的session配置,不会影响其他用户。向postmaster进程发送SINGUP信号,也只会影响后续建的连接,不会影响现有的连接。
user:普通用户可以使用set命令通过此参数来改变本链接中配置值。除了普通用户都可以改变外,这类参数与superuser类参数没有区别。