Synchronisation zwischen zwei PSQL-Servern?

Bietet PostgreSQL einen Mechanismus, um Daten zwischen zwei PostgreSQL-Server auszutauschen?
z.B. volle Synchronisation zweier DBs, Austausch/Ersetzen einer DB mit einer anderen, …?

streaming replication? Oder suchst Du HA?

わかりません :smiley:
“Oder suchst Du” sind die einzigen Wörter, die ich hier verstehe.

Hier ist ein nettes Tutorial. Leider fehlen hier völlig die Hintergrundinfos, was genau da eigentlich passiert. Als DB-Admin weiß man das wahrscheinlich auch so.

Für mich als Nicht-Admin sieht das aber so aus, als würde die Replikation nur in eine Richtung gehen - vom Master zum Slave. Es scheint keine Gleichberechtigung zu herschen.

Wie verhält sich der Mechanismus, wenn ich (offline) auf dem PC in der lokalen DB (über den lokalen Server) etwas ändere. Und umgekehrt, wie verhält sich das ganze, wenn ich auf der zweiten Maschine was ändere.

Mein Netbook benutze ich Unterwegs in verschiedensten (meinst Offfline-)Situationen. Gehe ich zu Hause raus, schmeiße ich vorher noch die Synchronisation an (betrifft Arbeitsdaten, Claws-Mail, Firefox, diverse weitere Tools). Wenn ich zurückkomme mache ich das erneut und alles was ich seither am Netbook geändert habe, wird auf die große Maschine zurückgeschrieben.
Diesen Workflow würde ich mit der PostgreSQL-Datenbank gerne beibehalten. Es handelt sich hier im konkreten Fall, um eine DB die ich in der Entwicklung (also weniger im Produktivbetrieb) einsetze. Das ist also keine elgante Lösung für einen Kunden oder so.

Streamin Replication ist Master -> Slave. Bi-Directional kommt - demnächst oder irgendwann. Aber es gibt Licht am Ende des Tunnels in Form von BDR.

Wie mein Vorredner schon geschrieben hat, unterstützt Postgres aktuell in der Streaming Replikation nur die Master Slave Replikation. Sorry wenn ich kein Hintergrundinfos präsentiere, ich werde sie aber definitiv noch nachliefern. :wink: Ich versuche aber deine Fragen hier schon mal zu beantworten.

Ja du hast recht sie sind nicht gleichberechtigt, es ist immer nur möglich in den Master zu schreiben. Der Slave läuft dann im sogenannten Read Only Modus was für lese lastige Applikationen, welche zum Beispiel über einen Loadbalancer (Round Robin) gekoppelt sind, die Möglichkeit bietet die Last auf 2 Server zu verteilen. Änderungen am Slave sind leider somit nicht möglich.

Was deine Laptop Situation betrifft, ist das etwas schwieriger. Wenn ich das richtig verstehe, kommt es auch mal vor das du Daten auf deiner “großen” Maschine änderst und dann später mit dem Laptop dazustösst und dann die Daten vom Laptop auf die große Maschine migrierst.
Das wird so mit Postgres nicht klappen. Wie oben beschrieben ist der Slave Read Only.

Ich möchte dir aber trotzdem kurz erklären was du machen müsstest, solltest du nur auf dem Laptop Daten ändern und diese dann auf den “großen” Rechner synchen. Ist es notwendig dem Master so zu konfigurieren, das er auch die Transaction Logdateien, welche für die Repliaktion lebensnotwendig sind, vorhält. In Postgres kann man nicht sagen “halte sie 7 Tage vor”. Postgres arbeitet hier mit sogenannten Segmenten, welche eine Größe von 16MB (glaub das war default) pro Datei haben. Man kann über den Schalter wal_keep_segments die Anzahl der vorgehalten Dateien konfigurieren. Hier ist es also davon abhängig wieviele Änderungen du an der Datenbank vornimmst und wie groß der von dir eingestellte Wert ist. Sollte der Wert zu klein sein, kann es passieren, wenn du nach Hause kommst. Das der Slave Dateien haben möchte, welche du nicht mehr auf dem Master liegen hast.

Ich hoffe ich konnte dir ein wenig helfen und hab dich nicht weiter verwirrt.