1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
# -*- 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
}
|