• Windows-Version:

Auf der lokalen Seite müssen folgende Programme vorhanden sein:

– vacuumdb (aus der PostgreSQL-Installation)

– pg_dumpall (aus der PostgreSQL-Installation)

– zip (einfaches Archiviertool)

Python-Installation ab Version 2.5

Zusätzlich muss die Umgebungsvariable „PATH“ entsprechend gesetzt sein.

Systemsteuerung -> System -> Erweitert -> Umgebungsvariablen -> Path editieren und nach Eingabe eines Semikolons gewünschten Ordner hinzufügen.

Alternativ können die oben genannten Dateien (bis auf Python) auch einfach in den Ordner ‚C:\Windows\system32\‘ kopiert werden.

Wem das zu kompliziert ist, kann auch PostgreSQL installieren.

Der Quelltext muss noch an die Bedürfnisse des Benutzers angepasst werden (ziel_verzeichnis, REMOTEHOST, USER) und zum Schluss als Pythondatei  (remote_sicherung.py) gespeichert werden.

Mit dem folgenden Eingabe in der Kommandozeile wird das Skript gestartet.

python remote_sicherung.py

Hier ist der Code:

#!/usr/bin/python
# remote_sicherung.py
# Remote-Sicherung fuer eine Postgres DB
# Johannes Sommer, Januar 2007

import os
import time

# Lokales Ziel definieren (Verzeichnis anpassen!)
ziel_verzeichnis = 'C:\\Sicherung\\'

# Datum des heutigen Tages ist der Name des Dumps / Archivs (siehe unten)
jetzt = time.strftime('%Y%m%d')

# Backup
dump = ziel_verzeichnis + jetzt + '.backup'

# DB VACUUM
vacuum = 'vacuumdb -h REMOTEHOST -U USER --all'
if os.system(vacuum) == 0:
	print 'VACUUM erfolgreich'
else:
	print 'VACUUM fehlgeschlagen.'

# Remote-Datenbank-Dump mit pg_dumpall (Host und User anpassen!)
dbsichern = 'pg_dumpall -h REMOTEHOST -U USER > %s' % (dump)

# DB-Dump ausfuehren
if os.system(dbsichern) == 0:
	print 'Datenbank-Dump erfolgreich nach', dump
else:
	print 'Datenbank-Dump fehlgeschlagen.'

# Zusammenfuegen
archiv = ziel_verzeichnis + jetzt + '.zip'

# zip-Befehl
zippen = 'zip -qr %s %s' % (archiv, dump)

# Sicherung starten;
if os.system(zippen) == 0:
	# Dump loeschen
	if os.system('del %s' % (dump)) == 0:
		print 'Loesche Datenbank-Dump'
	else:
		print 'Loeschen des Datenbank-Dumps fehlgeschlagen'
	print 'Sicherung erfolgreich nach', archiv
else:
	print 'Sicherung fehlgeschlagen.'
  • Linux-Version:

Auf der lokalen Seite müssen folgende Programme vorhanden sein:

– vacuumdb (aus der PostgreSQL-Installation)

– pg_dumpall (aus der PostgreSQL-Installation)

– tar (sollte in jeder Linuxdistribution dabei sein)

Python-Installation ab Version 2.5

Zusätzlich muss die Umgebungsvariable „PATH“ entsprechend gesetzt sein. Im nachfolgenden Beispiel muss das Verzeichnis angepasst werden (hier liegen die Dateien ‚vacuumdb‘ und ‚pg_dumpall‘ in ‚/home/USER/bin‘).

export PATH=/home/USER/bin:$PATH

Wem das zu kompliziert ist, kann wie unter Windows auch PostgreSQL installieren.

Der Quelltext muss noch an die Bedürfnisse des Benutzers angepasst werden (ziel_verzeichnis, REMOTEHOST, USER) und zum Schluss als Pythondatei  (remote_sicherung.py) gespeichert werden.

Mit dem folgenden Eingabe in der Kommandozeile wird das Skript gestartet.

python remote_sicherung.py

Hier ist der Code:

#!/usr/bin/python
# remote_sicherung.py
# Remote-Sicherung fuer eine Postgres DB
# Johannes Sommer, Januar 2007

import os
import time
# Lokales Ziel definieren (Verzeichnis anpassen!)
ziel_verzeichnis = '/home/USER/Sicherung/'

# Datum des heutigen Tages ist der Name des Dumps / Archivs (siehe unten)
jetzt = time.strftime('%Y%m%d')

# Backup
dump = ziel_verzeichnis + jetzt + '.backup'

# DB VACUUM, (Host und User anpassen!)
vacuum = 'vacuumdb -h REMOTEHOST -U USER --all'

if os.system(vacuum) == 0:
	print 'VACUUM erfolgreich'
else:
	print 'VACUUM fehlgeschlagen.'

# Remote-Datenbank-Dump mit pg_dumpall (Host und User anpassen!)
dbsichern = 'pg_dumpall -h REMOTEHOST -U USER > %s' % (dump)

# DB-Dump ausfuehren
if os.system(dbsichern) == 0:
	print 'Datenbank-Dump erfolgreich nach', dump
else:
	print 'Datenbank-Dump fehlgeschlagen.'

# Zusammenfuegen
archiv = ziel_verzeichnis + jetzt + '.tar'

# zip-Befehl
zippen = 'tar -cvf %s %s' % (archiv, dump)

# Sicherung starten;
if os.system(zippen) == 0:
	# Dump loeschen
	if os.system('del %s' % (dump)) == 0:
		print 'Loesche Datenbank-Dump'
	else:
		print 'Loeschen des Datenbank-Dumps fehlgeschlagen'
	print 'Sicherung erfolgreich nach', archiv
else:
	print 'Sicherung fehlgeschlagen.'