pg_backup_copy.sh (Источник)

#!/bin/bash
DB_LIST=(`sudo -i -u postgres psql -l | awk {'print $1'}`)
MASTER_USER=
MASTER_PW=
INSTANCE=""
PORT=5432

mkdir -p /tmp/dump

sudo -i -u postgres pg_dumpall --roles-only > /tmp/dump/roles.sql
sed -i '/postgres/d;/CREATE ROLE/d;/WITH SUPERUSER/d' /tmp/dump/roles.sql
cp /tmp/dump/roles.sql /tmp/dump/roles2.sql
sed -i 's/ALTER/CREATE/' /tmp/dump/roles.sql

for tbl in $(cat /tmp/dump/roles2.sql | grep "ALTER" | awk {'print $3'} | grep user)
do
    echo "GRANT $tbl TO $MASTER_USER;" >> /tmp/dump/grant.sql
done

echo "Restore roles..."
PGPASSWORD=$MASTER_PW psql -q -h $INSTANCE -U $MASTER_USER postgres -f /tmp/dump/roles.sql

echo "Set grant..."
PGPASSWORD=$MASTER_PW psql -q -h $INSTANCE -U $MASTER_USER postgres -f /tmp/dump/grant.sql

for db in "${DB_LIST[@]}"
do
        sudo -i -u postgres pg_dump -d ${db} --create --no-owner > /tmp/dump/${db}.sql
        sed -i "s/postgres/$MASTER_USER/" /tmp/dump/${db}.sql
        PGPASSWORD=$MASTER_PW  psql -q -h $INSTANCE -U $MASTER_USER postgres -f /tmp/dump/${db}.sql
done
rm -r /tmp/dump