Nota: Contribución de Massimo Dal Zotto
El archivo opcional data/pg_options contiene opciones usadas por el backend para controlar los mensajes de trazado y otros parámetros ajustables del mismo. El archivo se vuelve a leer cuando el backend recibe la señal SIGHUP, permitiendo cambiar las opciones de tiempo de ejecución al vuelo, sin que sea preciso reiniciar Postgres. En este archivo se pueden incluír opciones de depuración usadas por el paquete de trazado (backend/utils/misc/trace.c) o parámetros numéricos usados por el backend para controlar su comportamiento.
Todas las pg_options se inicializan a cero al iniciar el backend. Si se añaden o se modifican opciones, serán leídas por todos los backend que se inicien a continuación. Para que cualquier cambio tome efecto en los backend que están activos, es preciso enviar una señal SIGHUP al postmaster, quien reenviará la señal a todos los backend activos. Se pueden activar los cambios para un backend específico enviándole directamente una señal SIGHUP.
Las pg_options pueden especificarse también con la opción -T de Postgres:
postgres opciones -T "verbose=2,query,hostlookup-"
Las funciones usadas para indicar errores y mensajes de depuración pueden usar la facilidad syslog(2). Los mensajes que se escriben en stdout o stderr incluyen un prefijo con la fecha, la hora y el número de proceso del backend que las genera.
#timestamp #pid #message 980127.17:52:14.173 [29271] StartTransactionCommand 980127.17:52:14.174 [29271] ProcessUtility: drop table t; 980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full 980127.17:52:14.186 [29286] Async_NotifyHandler 980127.17:52:14.186 [29286] Waking up sleeping backend process 980127.19:52:14.292 [29286] Async_NotifyFrontEnd 980127.19:52:14.413 [29286] Async_NotifyFrontEnd done 980127.19:52:14.466 [29286] Async_NotifyHandler done
Este formato facilita la lectura de los mensajes y permite saber exactamete lo que hace cada backend y en qué momento. También facilita la escritura de scripts awk o perl sencillos que analicen los historiales para detectar errores o problemas en la base de datos o para calcular estadísticas temporales de transaciones.
Los mensajes escritos a través de syslog utilizan la facilidad LOG_LOCAL0. El uso de syslog se controla mediante la opción syslog en pg_options. Por desgracia, muchas funciones llaman directamente a printf() para escribir sus mensajes a stdout o stderr, cuya salida no se puede controlar mediante la opción syslog ni puede incluír fecha y hora. Sería recomendable sustituir todas las llamadas a printf con la macro PRINTF, y todas las escrituras a stderr por la macro EPRINTF, para poder controlar toda la salida de un modo uniforme.
El formato del archivo pg_options es como sigue:
# comentario option=valor_entero # Establece el valor de option option # establece option = 1 option+ # establece option = 1 option- # establece option = 0Observe que keyword puede ser una abreviatura de un nombre de opción de los definidos en backend/utils/misc/trace.c.
Ejemplo 22-1. Archivo pg_options
Por ejemplo, mi archivo pg_options contiene los siguientes valores:
verbose=2 query hostlookup showportnumber
Actualmente están definidas las opciones:
Marca de traza global. Los valores permitidos son:
Mensajes de trazado activados individualmente
Activar todos los mensajes de trazado
Inhibir todos los mensajes de trazado
Marca de verbosidad. Valores permitidos:
Sin mensajes, éste es el valor por omisión.
Escribir mensajes de información.
Escribir más mensajes de información.
Trazar peticiones. Valores permitidos:
No escribir la petición.
Escribir una versión condensada de la petición en una línea.
Escribir la consulta completa.
Escribir el plan de consulta.
Escribir la salida del traductor de consultas.
Escribir la consulta reescrita.
Escribir las estadísticas del traductor de consultas.
Escribir las estadísticas del planificador.
Escribir las estadísticas de ejecución.
De momento no se usa, pero se precisa para habilitar nuevas características en el futuro.
Trazar bloqueos.
Trazar bloqueos de usuario.
Trazar 'spin locks'.
Trazar funciones de notificación.
Sin uso por el momento.
Sin uso por el momento.
Minimum relation oid traced by locks.
oid, if not zero, of relation traced by locks.
Sin uso por el momento.
Temporizador de comprobación de bloqueos circulares..
Marca de syslog. Valores permitidos:
Mensajes a stdout/stderr.
Mensajes a stdout/stderr y syslog.
Mensajes solamente a syslog.
Habilitar la consulta de nombre de host en ps_status.
Mostrar el número de puerto en ps_status.
Desbloqueo de pg_listener después de notify.
Borrar tuplas duplicadas de pg_listener.