Postgres usa las siguientes señales para la
comunicación entre el postmaster y los backends:
Tabla 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 |
| "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 |