backupninja/handlers/pgsql.helper.in
2021-01-22 11:24:14 -05:00

115 lines
3.9 KiB
Bash

# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
HELPERS="$HELPERS pgsql:postgresql_database_backup"
do_pgsql_databases() {
REPLY=
while [ -z "$REPLY" ]; do
formBegin "$pgsql_title: databases"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formItem "Database:"
formDisplay
[ $? = 0 ] || return 1
pgsql_databases="databases = "
for i in $REPLY; do
[ -n "$i" ] && pgsql_databases="$pgsql_databases $i"
done
done
}
pgsql_wizard() {
# constants
pgsql_title="PostgreSQL action wizard"
# backupdir
inputBox "$pgsql_title" "Directory where to store the backups:" "/var/backups/postgres"
[ $? = 1 ] && return
pgsql_backupdir="backupdir = $REPLY"
# databases
booleanBox "$pgsql_title" "Do you want to backup the whole cluster? If not, you'll be offered to choose the databases to backup."
if [ $? = 0 ]; then
pgsql_databases="databases = all"
else
do_pgsql_databases
[ $? = 0 ] || return 1
fi
# compress
booleanBox "$pgsql_title" "Do you want to compress the backups?"
if [ $? = 0 ]; then
pgsql_compress="compress = yes"
else
pgsql_compress="compress = no"
fi
# pg_dump format, defaults to plain, custom is recommended by PostgreSQL
menuBox "$pgsql_title" "Choose a pg_dump format:" \
plain "Default plain-text sql script, use with psql." \
tar "More flexible than the plain, use with pg_restore." \
custom "The most flexible format, use with pg_restore."
if [ $? = 0 ]; then
result="$REPLY"
case "$result" in
"tar") pgsql_format="format = tar";;
"custom") pgsql_format="format = custom";;
*) pgsql_format = "format = plain";;
esac
fi
# write config file
get_next_filename $configdirectory/20.pgsql
cat >> $next_filename <<EOF
### backupninja PostgreSQL config file ###
# backupdir = <dir> (default: /var/backups/postgres)
# where to dump the backups
$pgsql_backupdir
# databases = < all | db1 db2 db3 > (default = all)
# which databases to backup. should either be the word 'all' or a
# space separated list of database names.
# Note: when using 'all', pg_dumpall is used instead of pg_dump, which means
# that cluster-wide data (such as users and groups) are saved.
$pgsql_databases
# compress = < yes | no > (default = yes)
# if yes, compress the pg_dump/pg_dumpall output.
$pgsql_compress
# format = < plain | tar | custom > (default = plain)
# plain - Output a plain-text SQL script file with the extension .sql.
# When dumping all databases, a single file is created via pg_dumpall.
# tar - Output a tar archive suitable for input into pg_restore. More
# flexible than plain and can be manipulated by standard Unix tools
# such as tar. Creates a globals.sql file and an archive per database.
# custom - Output a custom PostgreSQL pg_restore archive. This is the most
# flexible format allowing selective import and reordering of database
# objects at the time the database is restored via pg_restore. This
# option creates a globals.sql file containing the cluster role and
# other information dumped by pg_dumpall -g and a pg_restore file
# per selected database. See the pg_dump and pg_restore man pages.
$pgsql_format
### You can also set the following variables in backupninja.conf:
# PSQL: psql path (default: /usr/bin/psql)
# PGSQLDUMP: pg_dump path (default: /usr/bin/pg_dump)
# PGSQLDUMPALL: pg_dumpall path (default: /usr/bin/pg_dumpall)
# PGSQLUSER: user running PostgreSQL (default: postgres)
EOF
chmod 600 $next_filename
}