Logische Replikation und Sequenzen
Notiz, Oktober 2026 · Labor
Logische Replikation in Postgres überträgt Zeilen, aber keine Sequenzen. Nach einem Umzug auf den neuen Primär stehen alle serial-Spalten auf dem Stand vom Anlegen der Subscription, und die ersten Inserts laufen in doppelte Schlüssel.
Was bei mir funktioniert hat: vor dem Umschalten die Sequenzen auf dem Ziel mit Abstand nachziehen.
SELECT format('SELECT setval(%L, %s);', s.sequencename, last_value + 1000)
FROM pg_sequences s WHERE last_value IS NOT NULL;
Der Abstand von tausend fängt Schreibvorgänge ab, die zwischen Abfrage und Umschalten noch durchlaufen. Für Tabellen mit sehr hohem Schreibaufkommen nehme ich den Abstand größer.
Offen: ob sich das mit pg_sequence_last_value sauberer lösen lässt, ohne die Sequenz zu berühren.