postgres/templates/dump.sh.tpl

43 lines
1.5 KiB
Smarty

#!/bin/sh
# vim: syntax=sh
set -euo pipefail
umask 0077
DEST=/backup/dumps
mkdir -p ${DEST}
export ZSTD_CLEVEL=[[ .pg.backup.dumps.compression ]]
export ZSTD_NBTHREADS=0
for DB in $(psql -d postgres -qtc "SELECT datname FROM pg_catalog.pg_database WHERE datallowconn IS TRUE AND datname NOT IN ('template0', 'template1');"); do
echo "Removing previous dumps"
rm -rf ${DEST}/${DB}*
[[- if .pg.backup.dumps.format | regexp.Match "^p(lain)?$" ]]
echo "Dumping ${DB} to ${DEST}/${DB}.sql.zst in plain format (compressed with zstd)"
pg_dump --format=plain ${DB} | zstd -o ${DEST}/${DB}.sql.zst
[[- else if .pg.backup.dumps.format | regexp.Match "^d(irectory)?$" ]]
echo "Dumping ${DB} to ${DEST}/${DB} in directory format"
mkdir -p ${DEST}/${DB}
pg_dump --format=directory -Z[[ .pg.backup.dumps.compression ]] -j4 --file=${DEST}/${DB} ${DB}
[[- else ]]
echo "Dumping ${DB} to ${DEST}/${DB}.[[ .pg.backup.dumps.format ]] in [[ .pg.backup.dumps.format ]] format"
pg_dump --format=[[ .pg.backup.dumps.format ]] --compress=[[ .pg.backup.dumps.compression ]] --file=${DEST}/${DB}.[[ .pg.backup.dumps.format ]] ${DB}
[[- end ]]
echo "Dumping ${DB} schema to ${DEST}/${DB}.schema.sql"
pg_dump --schema-only --format=plain ${DB} | zstd -o ${DEST}/${DB}.schema.sql.zst
done
rm -f ${DEST}/pg_globals.sql ${DEST}/pg_schema.sql
echo "Dumping globals to ${DEST}/pg_globals.sql"
pg_dumpall --globals-only | zstd -o ${DEST}/pg_globals.sql
echo "Dumping all schemas to ${DEST}/pg_schema.sql"
pg_dumpall --schema-only | zstd -o ${DEST}/pg_schema.sql