2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2

27.1. 標準 Unix 工具 #

在大多數 Unix 平臺上,PostgreSQL 會修改 ps 命令報告的程序標題,以便單獨的伺服器程序能夠被方便地識別。一個示例顯示如下:

$ ps auxww | grep ^postgres
postgres  15551  0.0  0.1  57536  7132 pts/0    S    18:02   0:00 postgres -i
postgres  15554  0.0  0.0  57536  1184 ?        Ss   18:02   0:00 postgres: background writer
postgres  15555  0.0  0.0  57536   916 ?        Ss   18:02   0:00 postgres: checkpointer
postgres  15556  0.0  0.0  57536   916 ?        Ss   18:02   0:00 postgres: walwriter
postgres  15557  0.0  0.0  58504  2244 ?        Ss   18:02   0:00 postgres: autovacuum launcher
postgres  15582  0.0  0.0  58772  3080 ?        Ss   18:04   0:00 postgres: joe runbug 127.0.0.1 idle
postgres  15606  0.0  0.0  58772  3052 ?        Ss   18:07   0:00 postgres: tgl regression [local] SELECT waiting
postgres  15610  0.0  0.0  58772  3056 ?        Ss   18:07   0:00 postgres: tgl regression [local] idle in transaction

ps 的正確呼叫方式因平臺而異,顯示細節也不同。此示例來自一個較新的 Linux 系統。)此處列出的第一個程序是主伺服器程序。它顯示的命令引數是啟動時使用的引數。接下來的四個程序是由主程序自動啟動的後臺工作程序。(如果您已將系統設定為不執行 autovacuum,則不會出現“autovacuum launcher”程序。)其餘的每個程序都是處理一個客戶端連線的伺服器程序。每個此類程序將其命令列顯示設定為以下格式:

postgres: user database host activity

使用者、資料庫和(客戶端)主機項在客戶端連線的整個生命週期內保持不變,但活動指示器會發生變化。活動可以是 idle(即,等待客戶端命令)、idle in transaction(在 BEGIN 塊內等待客戶端)或命令型別名稱,例如 SELECT。此外,如果伺服器程序當前正在等待另一個會話持有的鎖,則會附加 waiting。在上例中,我們可以推斷程序 15606 正在等待程序 15610 完成其事務,從而釋放某些鎖。(程序 15610 必須是阻塞者,因為沒有其他活動會話。在更復雜的情況下,有必要檢視 pg_locks 系統檢視以確定誰在阻塞誰。)

如果配置了 cluster_name,則叢集名稱也會顯示在 ps 輸出中。

$ psql -c 'SHOW cluster_name'
 cluster_name
--------------
 server1
(1 row)

$ ps aux|grep server1
postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: server1: background writer
...

如果您關閉了 update_process_title,則活動指示器不會更新;程序標題僅在新程序啟動時設定一次。在某些平臺上,這可以節省可觀的每個命令的開銷;在其他平臺上,則微不足道。

提示

Solaris 需要特殊處理。您必須使用 /usr/ucb/ps,而不是 /bin/ps。您還必須使用兩個 w 標誌,而不僅僅是一個。此外,您的原始 postgres 命令呼叫必須具有比每個伺服器程序提供的短的 ps 狀態顯示。如果您沒有完成這三件事,每個伺服器程序的 ps 輸出將是原始的 postgres 命令列。

提交更正

如果您在文件中看到任何不正確、與您對特定功能的使用經驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。