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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top