PG_CTL(1)

NAME
pg_ctl - 啟動，停止和重啟 PostgreSQL 服務器

SYNOPSIS

pg_ctl start [ -w ] [ -s ] [ -D datadir ] [ -l filename ] [ -o options ] [ -p path ] pg_ctl stop [ -W ] [ -s ] [ -D datadir ] [ -m s[mart] | f[ast] | i[mmediate] ] pg_ctl restart [ -w ] [ -s ] [ -D datadir ] [ -m s[mart] | f[ast] | i[mmediate] ] [ -o options ] pg_ctl reload [ -s ] [ -D datadir ] pg_ctl status [ -D datadir ]

DESCRIPTION 描述

pg_ctl 是一個用于啟動，停止， 或者重起 PostgreSQL 後端服務器（postmaster）， 或者顯示一個運行著的服務器的狀態的工具， 盡管我們可以手動啟動服務器，但是 pg_ctl 封裝了重新定向日志輸出， 與終端和進程組合理分離，以及另外提供了一個選項用于有控制的關閉。

在 start 模式裡會啟動一個新的服務器。 服務器是在後台啟動的，標準輸入被附著到了 /dev/null 上。如果使用了 -l，那麼標準輸出和標準錯誤被定向到一個日志文件， 要麼就是重新定向到 pg_ctl 的標準輸出（而不是標準錯誤）。 如果沒有選定日志文件，pg_ctl 的標準輸出應該重新定向到一個文件或者用管道輸出到另外一個進程， 比如那些日志旋轉程序，否則，postmaster 將把它的輸出寫到控制終端（在後台）並且將不會脫離 shell 的進程組。

在 stop 模式下，那個正在特定數據目錄運行的服務器被關閉。 你可以用 -m 選項選擇三種不同的關閉模式："Smart" 模式等待所有客戶端中斷聯接。 這個是缺省。"Fast" 模式並不等待客戶端中斷聯接。 所有活躍事務都被回卷並且客戶端都強制斷開。 "Immediate" 模式將在沒有幹凈關閉的情況下退出。這麼做將導致在重新啟動的時候的恢復。

restart 實際上是先執行一個停止，然後緊跟一個啟動。它允許變換 postmaster 命令行的選項。

reload 模式簡單地給 postmaster 發送一個 SIGHUP 信號，導致它重新讀取她的配置文件 （postgresql.conf, pg_hba.conf 等等） 這樣就允許修改配置文件選項而不用完全重啟系統來使之生效。

status 模式監查一個服務器是否在指定的數據目錄運行， 如果是，那麼顯示其 PID 和調用它的命令行選項。

OPTIONS 選項

-D datadir
     聲明該數據庫文件的文件系統位置。 如果忽略這個選項，使用環境變量 PGDATA。

-l filename
     把服務器日志輸出附加在 filename 文件上。 如果該文件不存在，那麼創建它。umask設置為 077， 因此缺省時是不允許從其它用戶向日志文件訪問的。

-m mode
     聲明關閉模式。mode 可以是smart, fast, 或者 immediate，或者是這三個之一的第一個字母。

-o options
     聲明要直接傳遞給 postmaster 的選項。
     參數通常都用單或者雙引號包圍以保証它們作為一個整體傳遞。

-p path
     聲明 postmaster 可執行文件的位置。 缺省時 postmaster 是從和 pg_ctl 相同的目錄取出，如果不是， 那麼就是寫死的安裝目錄。除非你想幹點什麼特別的事情，並且得到類似沒有找到 postmaster這樣的錯誤， 否則沒有必要使用這個選項。

-s
     只打印錯誤，而不打印提示性信息。

-w
     等待啟動或者關閉的完成。在 60 秒後超時。 這個參數是關閉時的缺省值。 成功的關閉是以刪除 PID 文件為標志的。對于啟動而言， 一次成功的 psql -l 就標志著成功。 pg_ctl 將視圖使用對 psql 合適的端口，如果存在環境變量 PGPORT，那麼用它。 否則，它將查找看看在 postgresql.conf 文件裡面是否設置了一個端口。 如果都沒有，它將使用 PostgreSQL 編譯時的缺省端口（缺省是 5432）。

-W
     不等待啟動或者停止的完成。這是啟動和重起的缺省。

ENVIRONMENT 環境

PGDATA
     缺省數據目錄位置

PGPORT
    psql(1) 的缺省端口（由 -w 選項使用）。

 其它的環境變量，參閱 postmaster(1).

FILES 文件

postmaster.pid
     這個文件存在于數據目錄中是為了幫助 pg_ctl 判斷服務器當前是否在運行。

postmaster.opts.default
     如果這個文件存在于數據目錄，pg_ctl（在 start 模式下）將把文件地內容當作傳遞給 postmaster 命令的選項傳遞過去，除非被 -o 選項覆蓋。

postmaster.opts
    如果這個文件存在于數據目錄，pg_ctl（在 start 模式下）將把文件地內容當作傳遞給 postmaster 命令的選項傳遞過去，除非被 -o 選項覆蓋。這個文件的內容也會在 status 模式裡顯示出來。

postgresql.conf
     這個文件在數據目錄中，會分析它以查找和 psql 一起用的合適的端口（在 start 模式裡給出 -w 的時候。）

NOTES 注意

 等待完全啟動還不是一個定義得很完整的操作， 如果訪問控制設置為本地客戶端在沒有手工交互的情況下不能訪問的話還可能會失效。（比如，口令認証）。

EXAMPLES 例子

  STARTING THE SERVER 啟動服務器

 啟動服務器：

$ pg_ctl start

 啟動服務器的一個例子， 等到服務器 啟動了才退出：

$ pg_ctl -w start

 用于一個 postmaster 使用端口 5433，而且不帶 fsync 運行，使用：

$ pg_ctl -o "-F -p 5433" start

  STOPPING THE SERVER 停止服務器

$ pg_ctl stop

 停止服務器，使用 -m 開關允許我們控制如何把後端停下來。 -w等待服務器停止。-m 聲明後端的停止模式。

  RESTARTING THE SERVER 重起服務器

 這個命令幾乎等于先停止 postmaster 然後再啟動她，只不過 pg_ctl 保存並重新使用上一次運行 postmaster 的命令行參數。重起服務器的最簡單的方法是：

$ pg_ctl restart

 重起服務器，等待其停止和重起：

$ pg_ctl -w restart

 使用 5433 重起並且重起後關閉 fsync：

$ pg_ctl -o "-F -p 5433" restart

  SHOWING THE SERVER STATUS 顯示服務器狀態

 下面是來自 pg_ctl 的狀態輸出的例子：

$ pg_ctl status
pg_ctl: postmaster is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postmaster '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'

 這是在重起模式裡使用的命令行。

SEE ALSO 參見

postmaster(1)

譯者
Postgresql 中文網站 何偉平 <laser@pgsqldb.org>