Обсуждение: split pg_dumpall backups per database
Hi all, is it possible to instrument pg_dumpall to produce separate sql files for each database it is going to backup? I'd like to keep separate backups of my databases, but using pg_dump can lead to forgetting a database..... Thanks, Luca
Luca Ferrari wrote:
> Hi all,
> is it possible to instrument pg_dumpall to produce separate sql files for each
> database it is going to backup? I'd like to keep separate backups of my
> databases, but using pg_dump can lead to forgetting a database.....
You could build a shell script to repeatedly call pg_dump:
#!/bin/sh
DBLIST=`/path/to/psql -p 5483 -U postgres -d postgres -q -t -c 'SELECT
datname from pg_database'`
for d in $DBLIST
do
echo "db = $d";
pg_dump -U postgres -Fc $d > /path/to/backups/$d.dump
done
Two things to remember:
1. If you're going to have spaces or punctuation in the database names
you'll need to quote all the $d
2. You'll want to call pg_dumpall --globals-only to get all the user
details.
--
Richard Huxton
Archonet Ltd
On Tue, Mar 11, 2008 at 09:54:47AM +0100, Luca Ferrari wrote: > Hi all, > is it possible to instrument pg_dumpall to produce separate sql files for each > database it is going to backup? I'd like to keep separate backups of my > databases, but using pg_dump can lead to forgetting a database..... psql -qAt -c 'select datname from pg_database where datallowconn' | xargs -r -I X pg_dump -C -f X.dump X depesz -- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
On 11/03/2008, Luca Ferrari <fluca1978@infinito.it> wrote: > Hi all, > is it possible to instrument pg_dumpall to produce separate sql files for each > database it is going to backup? I'd like to keep separate backups of my > databases, but using pg_dump can lead to forgetting a database..... You could use the method described here for a single database: http://archives.postgresql.org/pgsql-general/2008-02/msg00343.php Just slap a wrapper around it (untested), out.sql being the name of the dump-file: for i in $(awk '/^CREATE DATABASE/ {print $3}' out.sql); do dump.sh ${i} out.sql ${i}.sql; done Of course you won't be getting the creation of specific roles or anything that way. > Thanks, > Luca Cheers, Andrej -- Please don't top post, and don't use HTML e-Mail :} Make your quotes concise. http://www.american.edu/econ/notes/htmlmail.htm