freebsd-ports/databases/postgresql94-server/files/502.pgsql.in
Palle Girgensohn 630169ef43 The PostgreSQL Global Development Group has released an update to all supported
versions of our database system, including 9.5.4, 9.4.9, 9.3.14, 9.2.18 and
9.1.23. This release fixes two security issues. It also patches a number of
other bugs reported over the last three months. Users who rely on security
isolation between database users should update as soon as possible. Other users
should plan to update at the next convenient downtime.

If you are using the ICU patch, please consult UPDATING.

Improve periodic cleanup, suggested by claudius (at) ambtec.de. [1]

PR:		210941 [1]
Security:	CVE-2016-5423, CVE-2016-5424
2016-08-11 16:39:40 +00:00

116 lines
3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
#
# $FreeBSD$
#
# Maintenance shell script to vacuum and backup database
# Put this in /usr/local/etc/periodic/daily, and it will be run
# every night
#
# Written by Palle Girgensohn <girgen@pingpong.net>
#
# In public domain, do what you like with it,
# and use it at your own risk... :)
#
# Define these variables in either /etc/periodic.conf or
# /etc/periodic.conf.local to override the default values.
#
# daily_pgsql_backup_enable="YES" # do backup of all databases
# daily_pgsql_backup_enable="foo bar db1 db2" # only do backup of a limited selection of databases
# daily_pgsql_vacuum_enable="YES" # do vacuum
# If there is a global system configuration file, suck it in.
#
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
: ${daily_pgsql_user:="%%PG_USER%%"}
: ${daily_pgsql_port:=5432}
: ${daily_pgsql_vacuum_args:="-U ${daily_pgsql_user} -p ${daily_pgsql_port} -qaz"}
: ${daily_pgsql_pgdump_args:="-U ${daily_pgsql_user} -p ${daily_pgsql_port} -bF c"}
: ${daily_pgsql_pgdumpall_globals_args:="-U ${daily_pgsql_user} -p ${daily_pgsql_port}"}
# backupdir is relative to ~pgsql home directory unless it begins with a slash:
: ${daily_pgsql_backupdir:="~${daily_pgsql_user}/backups"}
: ${daily_pgsql_savedays:="7"}
# allow '~´ in dir name
eval backupdir=${daily_pgsql_backupdir}
rc=0
pgsql_backup() {
# daily_pgsql_backupdir must be writeable by user %%PG_USER%%
# ~%%PG_USER%% is just that under normal circumstances,
# but this might not be where you want the backups...
if [ ! -d ${backupdir} ] ; then
echo Creating ${backupdir}
mkdir -m 700 ${backupdir}; chown ${daily_pgsql_user} ${backupdir}
fi
echo
echo "PostgreSQL backups"
# Protect the data
umask 077
rc=$?
now=`date "+%Y-%m-%dT%H:%M:%S"`
file=${daily_pgsql_backupdir}/pgglobals_${now}
su -l ${daily_pgsql_user} -c \
"umask 077; pg_dumpall -g ${daily_pgsql_pgdumpall_globals_args} | gzip -9 > ${file}.gz"
db=$1
while shift; do
echo -n " $db"
file=${backupdir}/pgdump_${db}_${now}
su -l ${daily_pgsql_user} -c "umask 077; pg_dump ${daily_pgsql_pgdump_args} -f ${file} ${db}"
[ $? -gt 0 ] && rc=3
db=$1
done
if [ $rc -gt 0 ]; then
echo
echo "Errors were reported during backup."
fi
# cleaning up old data
find ${backupdir} \( -name 'pgdump_*' -o -name 'pgglobals_*' -o -name '*.dat.gz' -o -name 'toc.dat' \) \
-a -mtime +${daily_pgsql_savedays} -delete
echo
}
case "$daily_pgsql_backup_enable" in
[Yy][Ee][Ss])
dbnames=`su -l ${daily_pgsql_user} -c "umask 077; psql -U ${daily_pgsql_user} -p ${daily_pgsql_port} -q -t -A -d template1 -c SELECT\ datname\ FROM\ pg_database\ WHERE\ datname!=\'template0\'"`
pgsql_backup $dbnames
;;
[Nn][Oo])
;;
"")
;;
*)
pgsql_backup $daily_pgsql_backup_enable
;;
esac
case "$daily_pgsql_vacuum_enable" in
[Yy][Ee][Ss])
echo
echo "PostgreSQL vacuum"
su -l ${daily_pgsql_user} -c "vacuumdb ${daily_pgsql_vacuum_args}"
if [ $? -gt 0 ]
then
echo
echo "Errors were reported during vacuum."
rc=3
fi
;;
esac
exit $rc