#!/bin/sh # # pg_dumpall [pg_dump parameters] # dumps all databases to standard output # It also dumps the pg_shadow table # # to adapt to System V vs. BSD 'echo' #set -x if echo '\\' | grep '\\\\' >/dev/null 2>&1 then BS='\' # BSD else BS='\\' # System V fi # # Dump everyone but the postgres user # initdb creates him # # get the postgres user id # POSTGRES_SUPER_USER_ID="`echo \" \ select datdba \ from pg_database \ where datname = 'template1'; \" | \ psql -A -q -t template1`" echo "${BS}connect template1" # # delete all users in case they run this twice # # we don't use POSTGRES_SUPER_USER_ID because the postgres super user id # could be different on the two installations # echo "select datdba into table tmp_pg_shadow \ from pg_database where datname = 'template1';" echo "delete from pg_shadow where usesysid <> tmp_pg_shadow.datdba;" echo "drop table tmp_pg_shadow;" # # load all the non-postgres users # echo "copy pg_shadow from stdin;" psql -q template1 < $POSTGRES_SUPER_USER_ID; copy tmp_pg_shadow to stdout; drop table tmp_pg_shadow; END echo "${BS}." psql -A -q -t -c "select * from pg_database" template1 | grep '|' | tr '|' ' ' | \ grep -v '^template1 ' | \ while read DATABASE DBUSERID ENCODING DATAPATH do echo "${BS}connect template1 $DBUSERID" if pg_encoding $ENCODING >/dev/null 2>&1 then echo "create database $DATABASE with encoding='`pg_encoding $ENCODING`';" else echo "create database $DATABASE;" fi echo "${BS}connect $DATABASE $POSTGRES_USER" pg_dump ${1+"$@"} $DATABASE if [ "$?" -ne 0 ] then echo "pg_dump failed on $DATABASE, exiting" 1>&2 exit 1 fi done