1 |
#!/bin/bash |
#!/bin/bash |
2 |
|
|
3 |
|
info () { |
4 |
|
cat <<EOF |
5 |
|
|
6 |
|
Este programa 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 |
9 |
|
recomendamos correr el script primero contra una base de datos de |
10 |
|
prueba, y hacer un backup antes de convertir una base de producción. |
11 |
|
|
12 |
|
EOF |
13 |
|
} |
14 |
|
usage () { |
15 |
|
echo "Usage: update [<base> [<usuario> [<maquina>]]]" |
16 |
|
info |
17 |
|
exit |
18 |
|
} |
19 |
|
|
20 |
abort () { |
abort () { |
21 |
|
|
22 |
|
$DB -c "INSERT INTO __papo__ (key, value) VALUES ('BROKEN_DB', '$1 $2')" >& /dev/null |
23 |
|
|
24 |
cat <<'EOF' |
cat <<'EOF' |
25 |
|
|
26 |
_ _ _ _ |
_ _ _ _ |
39 |
La mala es que pasó algo inesperado que no sé precisar. Yo estaba $1 |
La mala es que pasó algo inesperado que no sé precisar. Yo estaba $1 |
40 |
$2, y de repente se murió. |
$2, y de repente se murió. |
41 |
|
|
|
La buena es que hiciste un backup antes, verdad? |
|
|
|
|
42 |
EOF |
EOF |
43 |
|
echo -n "La buena es que hiciste un backup antes." |
44 |
|
|
45 |
$DB -c "INSERT INTO __papo__ (key, value) VALUES ('BROKEN_DB', '$1 $2')" >& /dev/null |
if [ "$do_backup" == "s" ]; then |
46 |
|
echo |
47 |
|
read -e -p "Querés restaurar el backup que hiciste cuando empezaste? [S/n]" confirm |
48 |
|
case "$confirm" in |
49 |
|
n*|N*) |
50 |
|
;; |
51 |
|
*) |
52 |
|
$RESTORE |
53 |
|
esac |
54 |
|
else |
55 |
|
sleep 1 |
56 |
|
echo "\b, verdad?" |
57 |
|
fi |
58 |
|
|
59 |
exit 1 |
exit 1 |
60 |
} |
} |
61 |
|
|
62 |
|
|
|
usage () { |
|
|
cat <<EOF |
|
|
Usage: update [<base> [<usuario> [<maquina>]]] |
|
|
|
|
|
Actualiza una base de datos de PAPO versión 0.1.30 ó posterior. |
|
|
|
|
|
Como siempre, NO HAY GARANTIA DE QUE NO SE PIERDAN DATOS, y |
|
|
recomendamos correr el script primero contra una base de datos de |
|
|
prueba, y hacer un backup antes de convertir una base de producción. |
|
|
|
|
|
EOF |
|
|
exit |
|
|
} |
|
63 |
|
|
64 |
BASE="${1:-papo}" |
BASE="${1:-papo}" |
65 |
USER="${2:-papo}" |
USER="${2:-papo}" |
66 |
HOST="${3:-localhost}" |
HOST="${3:-localhost}" |
67 |
|
OPTS="-h $HOST -U $USER $BASE" |
68 |
|
|
69 |
DB="psql -q -A -t -v ON_ERROR_STOP=1 -h $HOST -U $USER $BASE" |
DUMPFILE=papo_backup |
70 |
|
RESTORE="pg_restore -c -Spostgres -h $HOST -U $USER -d $BASE $DUMPFILE" |
71 |
|
DUMP="pg_dump -F c -f $DUMPFILE $OPTS" |
72 |
|
DB="psql -q -A -t -v ON_ERROR_STOP=1 $OPTS" |
73 |
echo '\d' | $DB > /dev/null || usage |
echo '\d' | $DB > /dev/null || usage |
74 |
|
|
75 |
|
info |
76 |
|
read -e -p "Querés hacer un backup de la base de datos? [S/n]" do_backup |
77 |
|
case "$do_backup" in |
78 |
|
n*|N*) |
79 |
|
do_backup=n |
80 |
|
;; |
81 |
|
*) |
82 |
|
do_backup=s |
83 |
|
#[ -f "$DUMPFILE" ] && mv --backup=t "$DUMPFILE" "${DUMPFILE}~" |
84 |
|
echo -n "Haciendo el backup... " |
85 |
|
#$DUMP || exit |
86 |
|
echo -n "ok" |
87 |
|
esac |
88 |
|
|
89 |
$DB -c 'select * from __papo__ where 1=0' >& /dev/null |
$DB -c 'select * from __papo__ where 1=0' >& /dev/null |
90 |
if [ $? -ne 0 ]; then |
if [ $? -ne 0 ]; then |
91 |
|
|
147 |
# don't apply backups or temps --- habrá una forma mejor de hacer esto? |
# don't apply backups or temps --- habrá una forma mejor de hacer esto? |
148 |
[ "${i%[\~\#]}" != "$i" ] && continue |
[ "${i%[\~\#]}" != "$i" ] && continue |
149 |
|
|
150 |
|
echo -n " ${i##*(*/)}: " |
151 |
if $DB -c "insert into __papo_patches__ (patch) values ('$i')" >& /dev/null; then |
if $DB -c "insert into __papo_patches__ (patch) values ('$i')" >& /dev/null; then |
|
echo " voy a aplicar $i" |
|
152 |
if [ -x "$i" ]; then |
if [ -x "$i" ]; then |
153 |
RES=$("$i") || abort corriendo "$i" |
echo -n "corriendo... " |
154 |
|
RES=$("$i" 2>/dev/null) || abort corriendo "$i" |
155 |
|
echo -n "aplicando... " |
156 |
echo "$RES" | $DB >& /dev/null || abort aplicando "$i" |
echo "$RES" | $DB >& /dev/null || abort aplicando "$i" |
157 |
else |
else |
158 |
|
echo -n "aplicando... " |
159 |
$DB -f "$i" >& /dev/null || abort aplicando "$i" |
$DB -f "$i" >& /dev/null || abort aplicando "$i" |
160 |
fi |
fi |
161 |
echo " ok" |
echo "ok" |
162 |
else |
else |
163 |
echo " no voy a aplicar $i otra vez" |
echo "salteando (ya aplicado)" |
164 |
fi |
fi |
165 |
done |
done |
166 |
if [ -f "$DIR/__NEXT_VERSION__" ]; then |
if [ -f "$DIR/__NEXT_VERSION__" ]; then |
171 |
$DB -c "update __papo__ set value='$PAPO_VERSION' where key='version';" |
$DB -c "update __papo__ set value='$PAPO_VERSION' where key='version';" |
172 |
DIR=${PAPO_VERSION%.+([0-9])}/$PAPO_VERSION |
DIR=${PAPO_VERSION%.+([0-9])}/$PAPO_VERSION |
173 |
done |
done |
174 |
echo "No hay versiones de la base más nuevas que $PAPO_VERSION" |
echo "Todos los cambios que encontré han sido aplicados" |
175 |
|
echo "Tu base ahora es versión $PAPO_VERSION." |
176 |
|
if [ "$do_backup" == "s" ]; then |
177 |
|
read -e -p "Querés borrar el backup? [S/n]" del_backup |
178 |
|
case "$del_backup" in |
179 |
|
n*|N*) |
180 |
|
;; |
181 |
|
*) |
182 |
|
rm -v -f "$DUMPFILE" |
183 |
|
esac |
184 |
|
fi |