历史版本。 PostgreSQL 6.5 已结束支持。 请参阅 当前版本手册.
第 55 章 Postgres 信号
注意
由 Massimo Dal Zotto 贡献
Postgres 使用下列信号在 postmaster 和后端之间通信:
表 55.1. Postgres 信号
| 信号 | postmaster 动作 | 服务器动作 |
|---|---|---|
| SIGHUP | kill(*,sighup) | read_pg_options |
| SIGINT | die | cancel query |
| SIGQUIT | kill(*,sigterm) | handle_warn |
| SIGTERM | kill(*,sigterm), kill(*,9), die | die |
| SIGPIPE | ignored | die |
| SIGUSR1 | kill(*,sigusr1), die | quickdie |
| SIGUSR2 | kill(*,sigusr2) | async notify (SI flush) |
| SIGCHLD | reaper | ignored (alive test) |
| SIGTTIN | ignored | |
| SIGTTOU | ignored | |
| SIGCONT | dumpstatus | |
| SIGFPE | FloatExceptionHandler |
注意
“kill(*,signal)” 表示向所有后端发送一个信号。
与旧信号处理方式相比的主要变化是:用 SIGQUIT 而不是 SIGHUP 来处理 warn,用 SIGHUP 重新读取 pg_options 文件,以及把发送给 postmaster 的 SIGHUP、SIGTERM、SIGUSR1 和 SIGUSR2 重定向到所有活动后端。这样,发送给 postmaster 的这些信号就可以自动发送给所有后端,而无需知道它们的 pid。要关闭 postgres,只需向 postmaster 发送一个 SIGTERM,它会自动停止所有后端。
SIGUSR2 信号还用于防止 SI 缓存表溢出,这种情况发生在某个后端长时间不处理 SI 缓存时。当一个后端检测到 SI 表在 70% 满时,它就向 postmaster 发送一个信号,后者会唤醒所有空闲的后端并让它们刷写缓存。
程序员对信号的典型用法可能如下:
# stop postgres kill -TERM $postmaster_pid
# kill all the backends kill -QUIT $postmaster_pid
# kill only the postmaster kill -INT $postmaster_pid
# change pg_options cat new_pg_options > $DATA_DIR/pg_options kill -HUP $postmaster_pid
# change pg_options only for a backend cat new_pg_options > $DATA_DIR/pg_options kill -HUP $backend_pid cat old_pg_options > $DATA_DIR/pg_options