postgres 9.6 Debian GNU / Linux 9
se usa siguiendo un script bash simple que se llama desde el crontab de un usuario, myid es un parámetro pasado:
#!/bin/bash
...
PGPASSFILE="/home/user/.pgpass"
PGCONNECT=" psql -U myuser -w -h 000.000.000.000 -d mydatabase -p 5432"
PGCOMMAND1="SELECT something, somemmore FROM schema.table WHERE id= ${myid}"
PGRESULT=`$PGCONNECT -A -F ";" -t -c "$PGCOMMAND1"`
RETCODE1=$?
...
PGCOMMAND2="SELECT schema.functionname(${myid});"
PGRESULT=`$PGCONNECT -A -F ";" -t -c "$PGCOMMAND2"`
RETCODE2=$?
if [ $RETCODE1 -eq 0 ] && [ $RETCODE2 -eq 0 ]; then
mailx -s sendme_asuccessemail
else
echo -e "ret1: $RETCODE1\n" >> $MAIL_FILE
echo -e "ret2: $RETCODE2\n" >> $MAIL_FILE
mailx -s sendme_errormailwith retcode1=2
fi
y la mayoría de las veces todo está bien (el script se ejecuta 60 veces al día en diferentes momentos). una vez por semana o menos recibo un mensaje de error con el estado de salida de psql 2 en RETCODE1 como resultado de la selección.
de la página del manual:
2 if the connection to the server went bad and the session was not
interactive
puede suceder, este script se llama por usercrontab, que se ejecuta dos veces o más al mismo tiempo con myid diferente. Siempre se llama al segundo comando, que hace el trabajo real.
¿Cómo puedo reducir el error? ¿Qué significa realmente el error? ¿Puedo ignorarlo?
bash
cron
postgresql
FatFreddy
fuente
fuente
Respuestas:
El código de salida psql 2 puede ignorarse si no es demasiado frecuente, la razón podría ser la red o el estado de la base de datos. Para cavar más, puede agregar pasos de depuración al script que muestra la conectividad de red y el estado de la base de datos (el servidor está ocupado y cargado de consultas) antes de realizar un trabajo real.
fuente