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
EOF
)
EOF
-exit $exit
+exit $errno