¿Cómo verificar si PostgreSQL Suppingup fue exitoso?
-
27-10-2019 - |
Pregunta
Tenemos una base de datos PostgreSQL que está respaldada por la noche de un trabajo cron con un siguiente comando:
su postgres -c "pg_dump our_database | gzip > /home/smb/shared/database_backup.bak.gz"
Recientemente tuvimos una falla en el disco que comenzó con algunos sectores malos y durante ese tiempo PG_DUMP salió con los siguientes errores
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: catalog is missing 17 attribute(s) from relid 20158
pd_dump: The command was: LOCK TABLE public.obvez IN ACCESS SHARE MODE
Ahora, dado que estaba en Cron Job, nadie notó mensajes de error, la copia de seguridad fue interrumpida, pero no era cero, todo parecía bien y el error pasó desapercibido hasta la falla final del disco cuando nos dimos cuenta de que no teníamos copia de seguridad.
Logramos restaurar los datos de una copia de seguridad anterior, pero ahora me gustaría saber cuál sería la forma correcta de verificar si PG_DUMP terminó su trabajo con éxito o no.
Solución
Escribo el resultado en un archivo de registro, y al final del Cronjob, envío el contenido del archivo de registro a mi dirección de correo electrónico. De esa manera, sabré cuándo algo salió mal.
su postgres "pg_dump our_database 2>> $LOG_FILE | gzip > /home/smb/shared/database_backup.bak.gz"
cat $LOG_FILE | mailx $MAINTAINERS -s "Postgresql backup"
APÉNDICE: Si desea enviar el correo electrónico solo si algo salió mal, puede verificar el código de retorno de PG_DUMP:
LOG_FILE=/tmp/pgdump.err
if ! pg_dump -U backupuser "our_database" 2> $LOG_FILE
then
cat $LOG_FILE | mailx 'youremailaddress' -s "Postgresql backup failure!"
fi