1. 程式人生 > >pg_reload 如何使用以及注意事項。

pg_reload 如何使用以及注意事項。

不同作業系統平臺,pg_reload的用法:

UBUNTU/DEBIAN pg_ctlcluster 9.0 main reload
RED HAT/FEDORA service postgresql reload
pg_ctl -D /var/lib/pgsql/data reload
SOLARIS pg_ctl -D /var/lib/pgsql/data reload
MAC OS pg_ctl -D /var/lib/pgsql/data reload
FREEBSD pg_ctl -D /var/lib/pgsql/data reload

我們知道,一些引數(其實是看pg_settings 的context欄位),是可以不用重啟postgres cluster 就可以生效的,

如,使用如下命令:

1.作業系統命令列: pg_ctl reload (配置環境變數後)

或者

2.
postgres=# select pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)

究其根本,其實是先給 postmaster 傳送了 signal 訊號,然後該訊號被傳遞給所有的 bakend server process。

當然,也可以通過:

3.
kill -SIGHUP pid

甚至給專門的一個backend process 傳送訊號,不過慎用,不建議在生產庫上做這個操作。

舉例:

1.修改hba檔案

原檔案:
# "local" is for Unix domain socket connections only
local   all             all                                     trust
...
這時候有兩個session,session1連線的postgres庫,session2連線的benchmarksql庫。

開始修改pg_hba.conf檔案

修改後只能連線postgres庫:
# "local" is for Unix domain socket connections only
local   postgres             all                                     trust
...
進行pg_reload 這時候session1,進行 \c benmarksql 操作會報錯: psql: FATAL: no pg_hba.conf entry for host "[local]", user "postgres", database "benchmarksql" session2 已經連線到benchmarksql庫,儘管已經通過pg_reload 過載了資料庫所有配置檔案, 但是並不影響session2在benchmarksql庫的所有操作,因為提前連上了嘛-

更多關於pg_reload:

By 獅子歌歌