PREIN
/bin/sh
/usr/share/rpm-helper/add-user postgresql $1 postgres /var/lib/pgsql /bin/bash
if [ ! -e /var/log/postgresql ]; then
touch /var/log/postgresql
fi
chown postgres.postgres /var/log/postgresql
chmod 0700 /var/log/postgresql
# large objects are not dumped by dumpall, so do nothing if we detect some
test_lo_db ()
{
su - postgres -c "psql -d template1 -At -F ' ' -c 'SELECT datname from pg_database WHERE datallowconn ORDER BY 1;'" | \
while read DATABASE; do
su - postgres -c "psql -d $DATABASE -A -F ' ' -c '\lo_list'" | grep -E '([0-9]+ row.?)' | (grep -q -v '(0 rows)' && return 0) || continue &> /dev/null
return 0
done
return 1
}
dump_data ()
{
cp -f /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.mdk_update
cp -f /usr/share/pgsql/pg_hba.conf.sample /var/lib/pgsql/data/pg_hba.conf
service postgresql start
if [ ! -f $file ]; then
# This does not work nicely, because pg_dumpall override -Fc and does not allow custom format dumping. As a consequence large objects are not dumped.
# su - postgres -c "pg_dumpall -b -o -Fc > $file" &> /dev/null
rm -rf /var/lib/pgsql/rpmtmp
su - postgres -c "mkdir /var/lib/pgsql/rpmtmp"
su - postgres -c "pg_dumpall | gzip > $file"
fi
service postgresql stop
cp -f /var/lib/pgsql/data/pg_hba.conf.mdk_update /var/lib/pgsql/data/pg_hba.conf
}
file=/var/lib/pgsql/rpmtmp/pg_dumpall-7.4.1-2mdk.psql.gz
if [[ $1 -ge 1 ]] && grep -vq 7.4 /var/lib/pgsql/data/PG_VERSION &> /dev/null; then
# the psql -c '\lo_list' does not work inside rpm script for version < 7.3
if ! test_lo_db; then
if [ -f /var/lock/subsys/postgresql ]; then
service postgresql stop
dump_data
else
dump_data
fi
fi
fi
PREUN
/bin/sh
/usr/share/rpm-helper/del-service postgresql $1 postgresql
POSTIN
/bin/sh
/sbin/ldconfig
restore_dump ()
{
cp -f /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.mdk_update
mv -f /var/lib/pgsql/data /var/lib/pgsql/initdb.i18n /var/lib/pgsql/rpmtmp/
# This does not work nicely, because pg_dumpall override -Fc and does not allow custom format dumping. As a consequence large objects are not dumped.
# if service postgresql start && su - postgres -c "pg_restore -Fc -o -f $file" &> /dev/null; then
service postgresql start > /dev/null
if [ -f /var/lock/subsys/postgresql ] && su - postgres -c "gzip -cd $file | psql template1" > /dev/null; then
mv -f /var/lib/pgsql/rpmtmp/initdb.i18n /var/lib/pgsql/rpmtmp/initdb.i18n.rpmsave &> /dev/null
mv -f /var/lib/pgsql/rpmtmp/data/postmaster.opts /var/lib/pgsql/data/postmaster.opts.rpmsave &> /dev/null
find /var/lib/pgsql/rpmtmp/data -name "*.conf" -exec mv -f {} {}.rpmsave \; -exec mv {}.rpmsave /var/lib/pgsql/data/ \;
cp -f /var/lib/pgsql/data/pg_hba.conf.mdk_update /var/lib/pgsql/data/pg_hba.conf
rm -rf /var/lib/pgsql/rpmtmp
else
service postgresql stop
rm -f $file /var/lib/pgsqlinitdb.i18n
rm -rf /var/lib/pgsql/data
mv -f /var/lib/pgsql/rpmtmp/data /var/lib/pgsql/rpmtmp/initdb.i18n /var/lib/pgsql/
rmdir /var/lib/pgsql/rpmtmp &> /dev/null
fi
}
file=/var/lib/pgsql/rpmtmp/pg_dumpall-7.4.1-2mdk.psql.gz
if grep -vq 7.4 /var/lib/pgsql/data/PG_VERSION &> /dev/null && [[ $1 -ge 1 && -f $file ]]; then
if [ -f /var/lock/subsys/postgresql ]; then
service postgresql stop &> /dev/null
restore_dump
service postgresql start &> /dev/null
else
restore_dump
fi
fi
/usr/share/rpm-helper/add-service postgresql $1 postgresql
POSTUN
/bin/sh
/sbin/ldconfig
/usr/share/rpm-helper/del-user postgresql $1 postgres