PostgreSQL資料庫的配置參數都在postgresql.conf檔案中,此檔案的目錄為資料庫的資料目錄($PGDATA)。這些參數有些是直接修改就可以生效,有些需要重新開機資料庫才能生效,而有些根本就不能修改。PG資料庫把這些參數分為以下幾類:
internal:這類參數為隻讀參數。有的是postgres程式寫死的,有些是在安裝資料庫時intdb時設定好的。
postmaster:這類參數需要重新開機資料庫才能生效。
sighup:不需要重新開機資料庫,但要向postmaster程序發送sighup信号,即需要pg_ctl reload指令。
backend:無需重新開機資料庫,隻需向postmaster程序發送sighup信号。但新的配置值隻能在之後的新連接配接中生效,已有連接配接中這些參數值不會改變。
superuser:這類參數可以由超級使用者使用set修改。參數設定後隻會影響超級使用者自身的session配置,不會影響其他使用者。
user:普通使用者使用set設定,這類參數修改後和superuser類參數一樣,也是隻影響自身session。
我們可以通過查詢pg_settings表的context字段值來檢視參數是否需要重新開機資料庫生效。如下:
$ psql
psql (13.3)
Type "help" for help.
postgres=#
postgres=# show log_statement;
log_statement
---------------
none
(1 row)
postgres=# select name,context from pg_settings where name='log_statement';
name | context
---------------+-----------
log_statement | superuser
postgres=# alter system set log_statement='mod';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
postgres=# alter system set log_statement='none';