DBAtlas · Atlas für Datenbankbetrieb

Tabelle zu einer Publication hinzufügen und Subscription aktualisieren (REFRESH PUBLICATION)

PostgreSQLLogische Replikation

Befehl

-- Publisher:
ALTER PUBLICATION pub_app ADD TABLE orders;
-- PG15+: all tables in a schema: ALTER PUBLICATION pub_app ADD TABLES IN SCHEMA app_schema;
SELECT pubname, schemaname, tablename FROM pg_publication_tables WHERE pubname = 'pub_app';
-- Subscriber (the table structure must already exist):
ALTER SUBSCRIPTION sub_app REFRESH PUBLICATION WITH (copy_data = true);
SELECT srrelid::regclass AS table_name, srsubstate FROM pg_subscription_rel ORDER BY 1;

Was es tut

Fügt auf dem Publisher eine neue Tabelle zur Publication hinzu; auf dem Subscriber nimmt REFRESH PUBLICATION die neuen Tabellen in die Subscription auf und startet mit copy_data = true die initiale Kopie (tablesync). srsubstate: i = init, d = data copy, f = copy finished, s = synchronized, r = ready.

Wann einsetzen

Wenn einer laufenden logischen Replikation eine neue Tabelle hinzugefügt oder eine Tabelle aus der Publication entfernt wird.

Vorsicht

Auch bei Publications mit FOR ALL TABLES oder TABLES IN SCHEMA übernimmt der Subscriber eine neue Tabelle erst nach REFRESH. REFRESH schlägt fehl, wenn die Tabelle auf dem Subscriber nicht existiert; DDL wird nicht repliziert. Hat eine veröffentlichte Tabelle keinen PRIMARY KEY und keine REPLICA IDENTITY, schlagen UPDATE/DELETE auf dem Publisher fehl. Die initiale Kopie einer großen Tabelle hält lange einen Slot und einen Snapshot auf dem Publisher.

In DBAtlas öffnen →

Verwandte Einträge