Capítulo 57. Señales de Postgres

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

SignalAcción postmasterAcción del servidor
SIGHUPkill(*,sighup)read_pg_options
SIGINTdiecancela la consulta
SIGQUITkill(*,sigterm)handle_warn
SIGTERMkill(*,sigterm), kill(*,9), diemuerte
SIGPIPEignoredmuerte
SIGUSR1kill(*,sigusr1), diemuerte rápida
SIGUSR2kill(*,sigusr2)notificación asíncrona (Vaciado SI)
SIGCHLDreaperignorado (prueba de funcionamiento)
SIGTTINignorado 
SIGTTOUignorado 
SIGCONTdumpstatus 
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