Correction : résilience des sauvegardes MySQL et PostgreSQL.
[lhc/ateliers.git] / local / backup / postgresql-snapshot
index a9b3348..bbacc62 100755 (executable)
@@ -15,22 +15,17 @@ test ! $# = 0 || set -- :
 install -d -m 770 -o backup -g backup \
  ~backup/snapshot/postgresql
 
-trap_exit () {
-       errno=$?
-       test $errno = 0 ||
-       cat >&2 <<-EOF
-               ERROR: $0 "$database" "$@"
-               EOF
-       #return $errno
- }
-trap trap_exit EXIT
-
+errno=0
 while IFS=' \r' read -r database
- do
+ do {
        test "${database:+set}"
-       test ! -e ~backup/snapshot/postgresql/"$database"
-               # NOTE: soit une sauvegarde est déjà en cours,
-               #       soit une précédente a échoué.
+       if test -e ~backup/snapshot/postgresql/$database
+        then
+               cat >&2 <<-EOF
+                       ERROR: soit une sauvegarde est déjà en cours, soit une précédente a échoué.
+                       EOF
+               false
+        fi
        install -d -m 770 -o backup -g backup \
         ~backup/snapshot/postgresql/"$database"
        psql --quiet "$database" -c "VACUUM (ANALYSE);"
@@ -40,6 +35,15 @@ while IFS=' \r' read -r database
        eval "$@"
        rm -rf \
         ~backup/snapshot/postgresql/"$database"
+ } || {
+       errno=$?
+       cat >&2 <<-EOF
+               ERROR: $0 "$database" "$@"
+               EOF
+       if test "${database:+set}"
+        then rm -rf ~backup/snapshot/postgresql/"$database"
+        fi
+ }
  done <<-EOF
        $(psql --quiet --tuples-only postgres <<-EOF || exit 1
                \set ON_ERROR_STOP on
@@ -50,3 +54,4 @@ while IFS=' \r' read -r database
                EOF
         )
        EOF
+exit $errno