# -*- 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 < (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 < (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 }