You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1021 B
37 lines
1021 B
#!/bin/bash
|
|
|
|
export PGUSER=postgres
|
|
|
|
pg_databases() {
|
|
echo "SELECT datname FROM pg_catalog.pg_database" | psql -At
|
|
}
|
|
|
|
dbs=$(pg_databases)
|
|
|
|
mkdir -p /var/backups/pg/
|
|
for db in $dbs; do
|
|
if [[ "$db" == "template"* || "$db" == "postgres" ]]; then
|
|
continue
|
|
fi
|
|
for exclude_db in $exclude_dbs; do
|
|
if [ "$exclude_db" == "$db" ]; then
|
|
echo "No backup for database $db as it is listed in 'exclude-dbs'."
|
|
continue 2
|
|
fi
|
|
done
|
|
dst=/var/backups/pg/$db.sql.gz
|
|
(( start = SECONDS ))
|
|
echo "Dumping database $db..." >&2
|
|
pg_dump -Ox "$db" | gzip --rsyncable > "$dst.inprogress"
|
|
errlvl="${PIPESTATUS[0]}"
|
|
## Atomic replace
|
|
(( elapsed = SECONDS - start ))
|
|
if [ "$errlvl" != "0" ]; then
|
|
echo " !! Error when dumping database $db." >&2
|
|
rm "$dst.inprogress"
|
|
else
|
|
mv "$dst.inprogress" "$dst"
|
|
printf " ..dumped %-35s (%12s in %10s)\n" "${dst##*/}" "$(du -sh "$dst" | cut -f 1)" "${elapsed}s" >&2
|
|
fi
|
|
done
|
|
|