#!/bin/bash
#
# dumps a single DB, given as $1, efficiently to file.
# filename can be given as $2, defaults to $1.sql.gz
# .gz and .bz2 are respected by filtering the output through gzip/bzip2

DBNAME="$1"
shift
if [ -z "$DBNAME" ] ; then
  echo "$(date +%Y-%m-%d\ %H:%M:%S): FATAL: No Databasename specified as \$1."
  echo "Syntax: $0 databaseName [ fileName [POSTGRESdump options] ]"
  exit 1
fi

DUMPFILE="$1"
shift
if [ -z "$DUMPFILE" ] ; then
  echo "$(date +%Y-%m-%d\ %H:%M:%S): INFO: No file name given as \$2, defaulting to ${DBNAME}.sql.gz"
  DUMPFILE="${DBNAME}.sql.gz"
fi

POSTGRESOPTS=""
POSTGRESOPTS="$POSTGRESOPTS -O" # --no-owner
POSTGRESOPTS="$POSTGRESOPTS $*"


echo "$(date +%Y-%m-%d\ %H:%M:%S): INFO: Saving DB $DBNAME to $DUMPFILE"

FILTER=""
echo "$DUMPFILE" |egrep '\.gz' >/dev/null && FILTER="gzip"
echo "$DUMPFILE" |egrep '\.bz2' >/dev/null && FILTER="bzip2"

#echo "Executing ..."
if [ -z "$FILTER" ] ; then
  #echo "sudo -u postgres pg_dump $POSTGRESOPTS -d $DBNAME \>$DUMPFILE"
  sudo -u postgres pg_dump $POSTGRESOPTS -d $DBNAME >$DUMPFILE || exit 11
else 
  #echo "sudo -u postgres pg_dump $POSTGRESOPTS -d $DBNAME \|$FILTER \>$DUMPFILE"
  sudo -u postgres pg_dump $POSTGRESOPTS -d $DBNAME |$FILTER >$DUMPFILE || exit 12
fi

chmod go-rwx $DUMPFILE
ls -ld $DUMPFILE

echo "$(date +%Y-%m-%d\ %H:%M:%S): GOOD: Saved DB $DBNAME to $DUMPFILE"

