Hallo liebe Entwicklergemeinde,
einige Recherchen haben leider nicht zum gewünschten Resultat geführt.
Ich möchte in C# ein kleines Progrämmchen schreiben, dass ein inkrementelles
Backup / Restore für Postgresql ermöglichen soll.
Background:
Ich arbeite in einer Firma, die Postgresql als Datenbank für ein Produkt
einsetzt, welches mit größeren Mengen von Binärdaten arbeiten muss.
Backups werden zur Zeit über pg_dump gemacht, aber sollen so bald als möglich
durch eine eigene Solution ersetzt werden.
Das Programm soll zum einen als Hilfsmittel für unsere Servicetechniker dienen,
andererseits soll das Programm wohl auch in der Lage sein, automatisch Backups
zu erstellen und im Bedarfsfall dann so von unseren Technikern ein Restore
machen zu können.
Mehrere Versuche haben herausgestellt, dass im Schnitt für das Anlegen von einem
Datensatz 40 - 55 MB in der Datenbank hinzukommen. Pro Tag werden im Schnitt
zwischen 30 - 50 Datensätze angelegt.
Pg_dump ist, so weit ich weiß leider nicht fähig, inkrementell zu arbeiten.
Dann habe ich mir das Postgres-Manual angesehen und gelesen, dass man
ein inkrementelles Backup mit Postgres selber machen. In der .conf die entsprechenden
Einstellungen vorgenommen und versucht ein Base-Backup und dann die WAL-Dateien zu
archivieren.
Im laufenden Betrieb wird die Datenbank schnell recht groß werden, so dass in
vordefinierten Abständen auch mal nicht mehr benötigte Datensätze gelöscht werden.
Das Backup über die gespeicherten WAL-Dateien wächst aber, so wie ich das verstanden
habe ständig an.
Man könnte zwar in bestimmten Abständen ein neues Base-Backup machen und dann die
nicht mehr benötigten WALs löschen, aber das wollen wir unseren Kunden ungerne
überlassen.
So möchte ich mir etwas eigenes überlegen das ähnlich pg_dump arbeitet, aber quasi
immer nur die Änderungen mit einem Backup abgleicht.
Eine exakte Reproduktion der gesammten Schritte ist nicht nötig, nur die Datenbestände
zwischen DB und Backup sollen z.B. täglich abgeglichen werden.
Ich wollte nun zum einen das Schema sichern und dann den kompletten Datenbestand.
So dass, wenn sich nur die Daten ändern auch im Bachup entweder hinzugefügt oder gelöscht
wird, und wenn sich aber das Schema einer Tabelle ändert, zum einen das Schema neu gesichert
wird und dann die komplette Tabelle nochmal.
Als Datenbank-Adapter nutzen wir in der Firma »Npgsql«. Ich hoffe, einer von euch kennt
sich damit ein wenig aus.
Das Auslesen / Zurückschreiben der Daten geht eigentlich und die Logik hinter dem vergleichen
DB und Backup sollte auch nicht so das Problem sein. So bleiben mir zum jetzigen
Zeitpunkt zwei Fragen:
Gibt es über diesen Adapter einen Weg das Schema einer Datenbank auszulesen?
Wenn ich das Schema gespeichert habe, kann ich dann alle Tabellen löschen und neu anlegen,
so dass sie das gleiche Schema haben wie zuvor?
Vielen Dank für eure Hilfe und viele Grüße