Control: tag -1 + patch
Hi,
Christoph Berg wrote:
> The script doesn't use pg_dumpall --globals to make a backup of global
> objects in the database. The resulting dumps will only restore with
> errors because the users and tablespaces do no exist.
Attached a patch which adds such functionality.
I'm though not happoy with the patch as it introduces quite some code
duplication, but I tried to not refactor upstream's code and to stay
with upstream's coding style. So the patch only adds code and doesn't
modify any code. (Although I had that itch to factor out some code
duplication. :-)
This way it should also make the patch easier to refresh in case of
new upstream versions which still don't have this functionality.
Regards, Axel
--
,''`. | Axel Beckert <[email protected]>, http://people.debian.org/~abe/
: :' : | Debian Developer, ftp.ch.debian.org Admin
`. `' | 1024D: F067 EA27 26B9 C3FC 1486 202E C09E 1D89 9593 0EDE
`- | 4096R: 2517 B724 C5F6 CA99 5329 6E61 2FF9 CD59 6126 16B5
Index: autopostgresqlbackup-1.0/autopostgresqlbackup
===================================================================
--- autopostgresqlbackup-1.0.orig/autopostgresqlbackup 2013-05-02
17:07:19.000000000 +0200
+++ autopostgresqlbackup-1.0/autopostgresqlbackup 2013-05-02
17:50:15.000000000 +0200
@@ -327,6 +327,18 @@
return 0
}
+# Global data dump function
+dbdumpglobals () {
+ touch $1
+ chmod 600 $1
+ if [ -n "$SU_USERNAME" ]; then
+ su $SU_USERNAME -c "pg_dumpall $PGHOST -g" > $1
+ else
+ pg_dumpall --username=$USERNAME $PGHOST -g > $1
+ fi
+ return 0
+}
+
# Compression function plus latest copy
SUFFIX=""
compression () {
@@ -428,6 +440,18 @@
BACKUPFILES="$BACKUPFILES
$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql$SUFFIX"
echo
----------------------------------------------------------------------
done
+
+ # Backup global stuff
+ MDB=globals
+ if [ ! -e "$BACKUPDIR/monthly/$MDB" ] # Check Monthly
DB Directory exists.
+ then
+ mkdir -p "$BACKUPDIR/monthly/$MDB"
+ fi
+ echo Monthly Backup of $MDB...
+ dbdump "$MDB" "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
+ compression "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
+ BACKUPFILES="$BACKUPFILES
$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql$SUFFIX"
+ echo
----------------------------------------------------------------------
fi
for DB in $DBNAMES
@@ -476,6 +500,49 @@
echo
----------------------------------------------------------------------
fi
done
+
+ # Weekly Globals Backup
+ DB=globals
+
+ # Create Seperate directory for each DB
+ if [ ! -e "$BACKUPDIR/daily/$DB" ] # Check Daily DB
Directory exists.
+ then
+ mkdir -p "$BACKUPDIR/daily/$DB"
+ fi
+
+ if [ ! -e "$BACKUPDIR/weekly/$DB" ] # Check Weekly DB
Directory exists.
+ then
+ mkdir -p "$BACKUPDIR/weekly/$DB"
+ fi
+
+ if [ "$DNOW" = "$DOWEEKLY" ]; then
+ echo Weekly Backup of Globals
+ echo Rotating 5 weeks Backups...
+ if [ "$W" -le 05 ];then
+ REMW=`expr 48 + $W`
+ elif [ "$W" -lt 15 ];then
+ REMW=0`expr $W - 5`
+ else
+ REMW=`expr $W - 5`
+ fi
+ rm -fv "$BACKUPDIR/weekly/$DB/${DB}_week.$REMW".*
+ echo
+ dbdumpglobals
"$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"
+ compression
"$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"
+ BACKUPFILES="$BACKUPFILES
$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql$SUFFIX"
+ echo
----------------------------------------------------------------------
+
+ # Daily Backup
+ else
+ echo Daily Backup of Globals
+ echo Rotating last weeks Backup...
+ rm -fv "$BACKUPDIR/daily/$DB"/*."$DOW".sql.*
+ echo
+ dbdumpglobals
"$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"
+ compression "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"
+ BACKUPFILES="$BACKUPFILES
$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql$SUFFIX"
+ echo
----------------------------------------------------------------------
+ fi
echo Backup End `date`
echo ======================================================================