Corrections : etc/nsd/zone.d/heureux-cyclage.org.zone.m4
[lhc/ateliers.git] / local / backup / postgresql-snapshot
1 #!/bin/sh -eu
2 # SYNTAX: $database_pattern -- $snapshot_eval
3 # DESCRIPTION: crée un instantané pour chaque base de données PostgreSQL $database donnée
4 # DESCRIPTION: dans ~backup/snapshot/postgresql/"$database",
5 # DESCRIPTION: puis évalue $snapshot_eval,
6 # DESCRIPTION: puis efface l'instantané.
7 ${TRACE:+set -x}
8
9 test "$(id -u)" = "$(id -u backup)"
10
11 database_pattern=$1; shift
12 test ! "${1-}" = -- || shift
13 test ! $# = 0 || set -- :
14
15 install -d -m 770 -o backup -g backup \
16 ~backup/snapshot/postgresql
17
18 errno=0
19 while IFS=' \r' read -r database
20 do {
21 test "${database:+set}"
22 if test -e ~backup/snapshot/postgresql/$database
23 then
24 cat >&2 <<-EOF
25 ERROR: soit une sauvegarde est déjà en cours, soit une précédente a échoué.
26 EOF
27 false
28 fi
29 install -d -m 770 -o backup -g backup \
30 ~backup/snapshot/postgresql/"$database"
31 psql --quiet "$database" -c "VACUUM (ANALYSE);"
32 pg_dump --blobs --compress 0 --format custom ${TRACE:+--verbose} \
33 --file ~backup/snapshot/postgresql/"$database"/dump.sql \
34 "$database"
35 eval "$@"
36 rm -rf \
37 ~backup/snapshot/postgresql/"$database"
38 } || {
39 errno=$?
40 cat >&2 <<-EOF
41 ERROR: $0 "$database" "$@"
42 EOF
43 if test "${database:+set}"
44 then rm -rf ~backup/snapshot/postgresql/"$database"
45 fi
46 }
47 done <<-EOF
48 $(psql --quiet --tuples-only postgres <<-EOF || exit 1
49 \set ON_ERROR_STOP on
50 SELECT datname
51 FROM pg_catalog.pg_database
52 WHERE datallowconn
53 AND datname LIKE '$database_pattern';
54 EOF
55 )
56 EOF
57 exit $errno