(本文章原始記錄於 2010 年 5 月 24 日)

******* pg_ctl (postgresql control) 啟動資料庫 *******

實際運作的 Server 程式檔為 postgres,而 pg_ctl 用來啟動、停用及重新啟動 postgres,並可以透過 -o 選項傳遞一些 OPTION 給 postgres。
由於 PGDATA 目錄的存取控制權屬於執行 initdb 時的作業系統使用者,
故只要是登入為該使用者,任何人都可以透過 pg_ctl 任意啟動或關閉 Server 程式。

常用 option 如下:

[-w | -W] 啟動或關閉時是否等待,若要等待則用小寫 w,不等待則用大寫 W
-s 執行時,除了錯誤訊息之外,將完全不顯示執行狀態的訊息
-t SECS 若使用 -w 等待啟動或關閉,則可以指定 -t <秒數> 決定等待時間
-D DATADIR 指定要啟動或關閉的 Cluster 檔案所在目錄
-l FILENAME 指定啟動後記錄運作狀況的 log 檔所存放的位置(檔名也要設定)
-o “OPTIONS” 將 postgres 接受的 “OPTIONS” 選項傳給 postgres 程式
-m MODE 指定關閉 Server 時的模式,MODE 可以為以下三種:

  • smart:等到所有客戶端都已中斷連線後才關閉
  • fast:直接離開,並適當地關閉程式
  • immediate:立即離開,並沒有適當處理一些事宜後才關閉,
    等到重新啟動時再作修復的動作
  1. 啟動 postgres 語法如下:
    pg_ctl start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o “OPTIONS”]

    範例:
    C:\> pg_ctl -w -D C:/postgresql8.4.31/data start
    啟動位於 C:/postgresql8.4.31/data 的 Cluster,並等待其啟動完成。

    C:\> pg_ctl -w -t 10 -D C:/postgresql8.4.31/data
    -l C:/postgresql8.4.31/logs/server.log start
    啟動位於 C:/postgresql8.4.31/data 的 Cluster,並等待 10 秒鐘的時間,
    且將記錄執行狀況的 log 檔放置於 C:/postgresql8.4.31/logs/server.log。

    C:\> pg_ctl -w -D C:/postgresql8.4.31/data
    -l C:/postgresql8.4.31/logs/server.log -o “-i -p 5432” start
    啟動位於 C:/postgresql8.4.31/data 的 Cluster,並等待其啟動完成。
    將記錄執行狀況的 log 檔放置於 C:/postgresql8.4.31/logs/server.log,
    並指定 postgres 透過 TCPIP 接受來自外部的請求連線,以及 Listen 5432 port。

  2. 關閉 postgres 語法如下:
    pg_ctl stop [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]

    範例:
    C:\> pg_ctl -w -t 10 -D C:/postgresql8.4.31/data stop
    關閉位於 C:/postgresql8.4.31/data 的 Cluster,並等待 10 秒鐘的時間。

    C:\> pg_ctl -D C:/postgresql8.4.31/data -m fast stop
    關閉位於 C:/postgresql8.4.31/data 的 Cluster,直接離開並適當地處理一些事宜後關閉。

  3. 重新啟動 postgres 語法如下:
    pg_ctl restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] [-o “OPTIONS”]

    範例:
    C:\> pg_ctl -w -t 10 -D C:/postgresql8.4.31/data restart
    關閉位於 C:/postgresql8.4.31/data 的 Cluster,並等待 10 秒鐘處理,
    然後重新啟動 Cluster。

    C:\> pg_ctl -w -D C:/postgresql8.4.31/data -m smart -o “-i -p 5432” restart
    關閉位於 C:/postgresql8.4.31/data 的 Cluster,並等待直到所有使用者中斷連線才關閉,然後重新啟動 Cluster,並重新指定 postgres 透過 TCPIP 接受外來的連線,且 Listen 5432 port。

除了 start、stop、restart 外,還有 reload、register、unregister 等動作,
關於 pg_ctl 的用法可以參考 C:\> pg_ctl --help
關於 postgres 的用法可以參考 C:\> postgres --help