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 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