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 命令行。

提交更正

如果您在文档中看到任何不正确、与您对特定功能的使用经验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。