mirror of
https://0xacab.org/liberate/backupninja.git
synced 2024-11-08 20:02:32 +01:00
7355535ee1
The format option of pg_dump enables tar and custom archive file formats in addition to the default plain-text file containing SQL commands. When either the tar or custom format are selected the behaviour of database=all is changed to no longer dump a single file via pg_dumpall. Instead pg_dumpall is called once to export the "global" data (roles & tablespaces) and then pg_dump is called once for each non-template table in the database. To support the GZIP and GZIP_OPTS variables in backupninja and to give the default --rsyncable gzip compression flag a chance at working on a PostgreSQL backup, the custom output is forced to not use compression. Instead compression is done via a pipe to gzip. Hopefully this benefits rsync and rdiff-backup style backups for reduced backup and storage costs that outweigh the restoration ones.
139 lines
4.7 KiB
Bash
139 lines
4.7 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_vserver() {
|
|
choose_one_vserver "$pgsql_title"
|
|
[ $? = 0 ] || return 1
|
|
pgsql_vsname="vsname = $REPLY"
|
|
}
|
|
|
|
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"
|
|
|
|
# backup the host system or a Vserver?
|
|
choose_host_or_one_vserver "$pgsql_title"
|
|
[ $? = 0 ] || return 1
|
|
if [ $host_or_vservers == vservers ]; then
|
|
do_pgsql_vserver
|
|
[ $? = 0 ] || return 1
|
|
fi
|
|
|
|
# backupdir
|
|
inputBox "$pgsql_title" "Directory where to store the backups:`[ -z \"$pgsql_vsname\" ] || echo \"\n(In respect to chosen vserver's root directory)\"`" "/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 ###
|
|
|
|
# vsname = <vserver> (no default)
|
|
# what vserver to operate on, only used if vserver = yes in /etc/backupninja.conf
|
|
# if you do not specify a vsname the host will be operated on
|
|
# Note: if operating on a vserver, $VROOTDIR will be prepended to backupdir.
|
|
EOF
|
|
if [ $host_or_vservers == vservers ]; then
|
|
echo -e "$pgsql_vsname\n" >> $next_filename
|
|
fi
|
|
|
|
cat >> $next_filename <<EOF
|
|
# 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
|
|
|
|
}
|