Nota: Contribución de Massimo Dal Zotto
Postgres usa las siguientes señales para la comunicación entre el postmaster y los backends:
Tabla 57-1. Señales Postgres
Signal | Acción postmaster | Acción del servidor |
---|---|---|
SIGHUP | kill(*,sighup) | read_pg_options |
SIGINT | die | cancela la consulta |
SIGQUIT | kill(*,sigterm) | handle_warn |
SIGTERM | kill(*,sigterm), kill(*,9), die | muerte |
SIGPIPE | ignored | muerte |
SIGUSR1 | kill(*,sigusr1), die | muerte rápida |
SIGUSR2 | kill(*,sigusr2) | notificación asíncrona (Vaciado SI) |
SIGCHLD | reaper | ignorado (prueba de funcionamiento) |
SIGTTIN | ignorado | |
SIGTTOU | ignorado | |
SIGCONT | dumpstatus | |
SIGFPE | FloatExceptionHandler |
Nota: "kill(*,signal)" significa enviar una señal a todo los backends.
Los principales cambios del viejo gestor de señal es el uso de SIGQUIT en lugar de SIGHUP para gestionar los avisos, SIGHUP intenta releer el fichero de pg_options y lo redirecciona a todos los backends activos de SIGHUP, SIGTERM, SIGUSR1 y SIGUSR2 llamados por el postmaster. Por este camino estas señales enviada al postmaster pueden ser enviadas automáticamente hacia todos los backends sin necesidad de conocer sus pids. Para bajar postgres lo único que se necesita es enviar un SIGTERM al postmaster y esto parará automáticamente todos los backends.
La señal SIGUSR2 es también usado para prevenir el desbordamiento del cache de la tabla SI esto pasa cuando algún backend no procesa la cache SI durante un largo periodo de tiempo. Cuando el backend detecta que la tabla SI esta a mas de un 70% simplemente envía una señal al postmaster el cual despertará a todos los backends desocupados y los hace que vacíe el cache.
El uso típico de las señales por los programadores puede ser el siguiente:
# 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