summaryrefslogtreecommitdiff
path: root/backup-postgres
diff options
context:
space:
mode:
Diffstat (limited to 'backup-postgres')
-rwxr-xr-xbackup-postgres59
1 files changed, 59 insertions, 0 deletions
diff --git a/backup-postgres b/backup-postgres
new file mode 100755
index 0000000..08aec23
--- /dev/null
+++ b/backup-postgres
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2002, 2003, 2004, 2005 Peter Palfrader <peter@palfrader.org>
+#
+# All rights reserved.
+#
+#
+
+umask 037
+
+set -e
+set -u
+
+DATE=`date "+%Y%m%d-%H%M%S"`
+CLIENTBASE=/srv/www/vhosts
+
+sudo -u postgres psql -l -t | awk '$1 != "" {print $1}' |
+while read db; do
+ if [ "$db" = "template0" -o "$db" = "template1" ] ; then
+ continue;
+ fi
+
+ CLIENT=`echo $db | sed -e 's/_.*//'`;
+ if [ -d "$CLIENTBASE/$CLIENT" ] ; then
+ BASE="$CLIENTBASE/$CLIENT/pg"
+ if [ ! -e "$BASE" ]; then
+ mkdir "$BASE"
+ chmod 02750 "$BASE"
+ else
+ if [ ! -d "$BASE" ]; then
+ echo "$BASE exists but is not a directory" >&2
+ continue
+ fi
+ fi
+
+ file="$BASE/$DATE-$db.plain"
+ sudo -u postgres pg_dump --create --format=p "$db" > "$file"
+ bzip2 -- "$file"
+
+ md5=`md5sum -- "$file.bz2" | awk '{print $1}'`
+ if [ -e "$BASE/MD5-$md5" ]; then
+ rm -- "$file.bz2"
+ ln "$BASE/MD5-$md5" "$file.bz2"
+ else
+ ln "$file.bz2" "$BASE/MD5-$md5"
+ fi
+
+
+ file="$BASE/$DATE-$db.tar"
+ sudo -u postgres pg_dump --blobs --create --format=t "$db" > "$file"
+ bzip2 -- "$file"
+
+ # clean up old stuff
+ find "$BASE" -name 'MD5-*' -links 1 -print0 | xargs --no-run-if-empty rm --
+ else
+ echo "Not doing a backup of $db" >&2
+ fi
+done