Correction : résilience des sauvegardes MySQL et PostgreSQL.
[lhc/ateliers.git] / local / backup / postgresql-snapshot
index da34ee0..bbacc62 100755 (executable)
@@ -15,32 +15,35 @@ test ! $# = 0 || set -- :
 install -d -m 770 -o backup -g backup \
  ~backup/snapshot/postgresql
 
-snapshot () {
-       local database="$1" && shift &&
-       test ! -e ~backup/snapshot/postgresql/"$database" &&
-               # NOTE: soit une sauvegarde est déjà en cours,
-               #       soit une précédente a échoué.
-       install -d -m 770 -o backup -g backup \
-        ~backup/snapshot/postgresql/"$database" &&
-       psql --quiet "$database" -c "VACUUM (ANALYSE);" &&
-       pg_dump --blobs --compress 0 --format custom ${TRACE:+--verbose} \
-        --file ~backup/snapshot/postgresql/"$database"/dump.sql \
-        "$database" &&
-       eval "$@" &&
-       rm -rf \
-        ~backup/snapshot/postgresql/"$database" &&
-       :
- }
-
-exit=0
+errno=0
 while IFS=' \r' read -r database
- do if ! snapshot "$database" "$@"
+ do {
+       test "${database:+set}"
+       if test -e ~backup/snapshot/postgresql/$database
         then
-               exit=1
                cat >&2 <<-EOF
-                       ERROR: snapshot "$database" "$@"
+                       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);"
+       pg_dump --blobs --compress 0 --format custom ${TRACE:+--verbose} \
+        --file ~backup/snapshot/postgresql/"$database"/dump.sql \
+        "$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
@@ -51,4 +54,4 @@ while IFS=' \r' read -r database
                EOF
         )
        EOF
-exit $exit
+exit $errno