Re: Shell script to Backup/Dump Database

From: Thom Brown <thom(at)linux(dot)com>
To: Andre Lopes <lopes80andre(at)gmail(dot)com>
Cc: postgresql Forums <pgsql-general(at)postgresql(dot)org>
Subject: Re: Shell script to Backup/Dump Database
Date: 2010-05-12 15:45:22
Message-ID: AANLkTikQNySkwhzP5n0LbGU70Bdz_Cwr47ZwJLBQmng9@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 12 May 2010 16:30, Andre Lopes <lopes80andre(at)gmail(dot)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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Thom Brown 2010-05-12 15:48:25 Re: Shell script to Backup/Dump Database
Previous Message Richard Broersma 2010-05-12 15:45:15 Reliability of Windows versions 8.3 or 8.4