#!/bin/sh/

# 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 ()
{
    if 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; then
      service postgresql start
      if [ ! -f $file ]; then
# Th  is 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
    fi
}

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

