3 |
info () { |
info () { |
4 |
cat <<EOF |
cat <<EOF |
5 |
|
|
6 |
Este programa una base de datos de PAPO versión 0.1.30 ó posterior. |
Este programa actualiza una base de datos de PAPO versión 0.1.30 ó posterior. |
7 |
|
|
8 |
Como siempre, NO HAY GARANTIA DE QUE NO SE PIERDAN DATOS, y |
Como siempre, NO HAY GARANTIA DE QUE NO SE PIERDAN DATOS, y |
9 |
recomendamos correr el script primero contra una base de datos de |
recomendamos correr el script primero contra una base de datos de |
17 |
exit |
exit |
18 |
} |
} |
19 |
|
|
20 |
LOGFILE=papo_log |
. ../common.sh || exit 1 |
|
|
|
|
abort () { |
|
|
|
|
|
$DB -c "INSERT INTO __papo__ (key, value) VALUES ('BROKEN_DB', '$1 $2')" >& /dev/null |
|
|
|
|
|
echo |
|
|
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" |
|
|
tail "$LOGFILE" |
|
|
echo "================================================================" |
|
|
cat <<EOF |
|
|
|
|
|
|
|
|
Bueno, hay buenas y malas noticas. |
|
|
|
|
|
La mala es que pasó algo inesperado que no sé precisar. Yo estaba $1 |
|
|
$2, y de repente se murió. |
|
|
|
|
|
EOF |
|
|
echo -n "La buena es que hiciste un backup antes" |
|
|
|
|
|
if [ "$do_backup" == "s" ]; then |
|
|
echo "." |
|
|
read -e -p "Querés restaurar el backup que hiciste cuando empezaste? [S/n]" confirm |
|
|
case "$confirm" in |
|
|
n*|N*) |
|
|
;; |
|
|
*) |
|
|
$RESTORE |
|
|
esac |
|
|
else |
|
|
echo -e ", verdad?" |
|
|
fi |
|
|
|
|
|
exit 1 |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
BASE="$1" |
|
|
USER="${2:-papo}" |
|
|
HOST="${3:-localhost}" |
|
|
OPTS="-h $HOST -U $USER $BASE" |
|
|
|
|
|
DUMPFILE=papo_backup |
|
|
TEMPFILE=$(tempfile || echo "/tmp/.PAPO") |
|
|
|
|
|
RESTORE="pg_restore -c -Spostgres -h $HOST -U $USER -d $BASE $DUMPFILE" |
|
|
DUMP="pg_dump -F c -f $DUMPFILE $OPTS" |
|
|
DB="psql -q -A -t -v ON_ERROR_STOP=1 $OPTS" |
|
|
echo '\d' | $DB > /dev/null || usage |
|
|
|
|
|
info |
|
|
mv --backup=t "$LOGFILE" "$LOGFILE~" |
|
|
read -e -p "Querés hacer un backup de la base de datos? [S/n]" do_backup |
|
|
case "$do_backup" in |
|
|
n*|N*) |
|
|
do_backup=n |
|
|
;; |
|
|
*) |
|
|
do_backup=s |
|
|
if [ -f "$DUMPFILE" ]; then |
|
|
echo -n "Hackiendo un backup del backup anterior..." |
|
|
mv --backup=t "$DUMPFILE" "${DUMPFILE}~" |
|
|
echo "ok" |
|
|
fi |
|
|
echo -n "Haciendo el backup... " |
|
|
$DUMP || exit |
|
|
echo "ok" |
|
|
esac |
|
21 |
|
|
22 |
$DB -c 'select * from __papo__ where 1=0' >& /dev/null |
$DB -c 'select * from __papo__ where 1=0' >& /dev/null |
23 |
if [ $? -ne 0 ]; then |
if [ $? -ne 0 ]; then |
57 |
EOF |
EOF |
58 |
|
|
59 |
else |
else |
60 |
broken=$( $DB -c "select to_char(date, 'YYYY-MM-DD%sHH24:MI:SS%s\n') || value from __papo__ where key='BROKEN_DB'" ) |
is_broken |
|
if [ -n "$broken" ]; then |
|
|
|
|
|
echo "La base de datos está en un estado desconocido, y existe" |
|
|
echo "una muy buena posibilidad de que esté rota." |
|
|
printf "Esto pasó el $broken.\n" " a las " " cuando yo estaba " |
|
|
echo |
|
|
echo "por favor comunicate con papo-abusers." |
|
|
|
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
PAPO_VERSION=$( $DB -c "select value from __papo__ where key='version'" ) |
|
61 |
fi |
fi |
62 |
|
|
63 |
shopt -s extglob |
shopt -s extglob |
64 |
DIR=${PAPO_VERSION%.+([0-9])}/$PAPO_VERSION |
set_dir |
65 |
echo "Tu base ahora es versión $PAPO_VERSION." |
echo "Tu base ahora es versión $PAPO_VERSION." |
66 |
while [ -d "$DIR" ]; do |
while [ -d "$DIR" ]; do |
67 |
echo Aplicando cambios a $PAPO_VERSION: |
echo Aplicando cambios a $PAPO_VERSION: |
92 |
break |
break |
93 |
fi |
fi |
94 |
$DB -c "update __papo__ set value='$PAPO_VERSION' where key='version';" |
$DB -c "update __papo__ set value='$PAPO_VERSION' where key='version';" |
95 |
DIR=${PAPO_VERSION%.+([0-9])}/$PAPO_VERSION |
set_dir |
96 |
echo "Tu base ahora es versión $PAPO_VERSION." |
echo "Tu base ahora es versión $PAPO_VERSION." |
97 |
done |
done |
98 |
echo "Todos los cambios que encontré han sido aplicados" |
echo "Todos los cambios que encontré han sido aplicados" |