Thanks for the reply. I will test today.
There are some good practices that I should do? For example, I have this database in a shared hosting, should I add the functionality of send the dumps by FTP to my PC once a week? Give some more ideias to avoid data loss in case of disaster. Best Regards, On Wed, May 12, 2010 at 4:45 PM, Thom Brown <t...@linux.com> wrote: > On 12 May 2010 16:30, Andre Lopes <lopes80an...@gmail.com> wrote: > >> Hi, >> >> I'am looking fo a shell script do Backup/Dump my PostgreSQL twice a day. >> >> I will need to do a full dump (schema + data), schema dump (only schema) >> and data (only data) >> >> There is something done on this subject? I'am very poor in shell script, >> there are some scripts on the web ready to use? >> >> >> Best Regards, >> > > Yes, several of us discussed something like this recently. Are you looking > to back up all databases on the cluster or just an individual database? > > If it's a cluster, you could have a shell script like this: > > #!/bin/bash > > mkdir /tmp/`date +\%Y\%m\%d` > pg_dumpall -U postgres | gzip > /tmp/`date +\%Y\%m\%d`/FULL.sql.gz > pg_dumpall -c -U postgres | gzip > /tmp/`date +\%Y\%m\%d`/SCHEMA.sql.gz > pg_dumpall -a -U postgres | gzip > /tmp/`date +\%Y\%m\%d`/DATA.sql.gz > > > If you want a single database, try this: > > #!/bin/bash > > mkdir /tmp/`date +\%Y\%m\%d` > pg_dump -U postgres my_database | gzip > /tmp/`date > +\%Y\%m\%d`/my_database_FULL.sql.gz > pg_dump -s -U postgres my_database | gzip > /tmp/`date > +\%Y\%m\%d`/my_database_SCHEMA.sql.gz > pg_dump -a -U postgres my_database | gzip > /tmp/`date > +\%Y\%m\%d`/my_database_DATA.sql.gz > > > If you want each individual database, try this: > > #!/bin/bash > > mkdir /tmp/`date +\%Y\%m\%d` > query="select datname from pg_database where not datistemplate and > datallowconn;" > for line in `psql -U postgres -At -c "$query" postgres` > do > pg_dump -U postgres "$line" | gzip > /tmp/`date > +\%Y\%m\%d`/"$line"_FULL.sql.gz > pg_dump -s -U postgres "$line" | gzip > /tmp/`date > +\%Y\%m\%d`/"$line"_SCHEMA.sql.gz > pg_dump -a -U postgres "$line" | gzip > /tmp/`date > +\%Y\%m\%d`/"$line"_DATA.sql.gz > done > > Obviously you can change the output location to something other that /tmp > if you're not going to transfer it anywhere. Just make sure the path > exists. If you are copying it away immediately after, make sure you delete > it or they'll build up. > > If you want to schedule it, bung it in a shell script like > backup_databases.sh and stick it in the root crontab. > > Regards > > Thom >