#!/bin/bash
restore_dump ()
{
    if 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/; 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.
#       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
   fi  
}

file=/var/lib/pgsql/rpmtmp/pg_dumpall-7.4.1-1mdk.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
