PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Beim Synchronisieren von 2 Datenbank konnte ein Commit nicht ausgeführt werden

Da Sie eine verteilte Transaktion durchführen möchten , benötigen Sie das zweiphasige Commit-Protokoll .

Sie starten Transaktionen auf beiden Datenbanken wie üblich, aber anstatt sie festzuschreiben, führen Sie sie aus

PREPARE TRANSACTION 'some_name';

Dies führt alles aus, was während eines Commit fehlschlagen könnte, und hält die Transaktionen aufrecht. Sobald dies erfolgreich war, führen Sie Folgendes auf beiden Datenbanken aus:

COMMIT PREPARED 'some_name';

um die Transaktionen festzuschreiben.

Wenn etwas während der PREPARE TRANSACTION fehlschlägt , führen Sie Folgendes aus, um bereits vorbereitete Transaktionen loszuwerden:

ROLLBACK PREPARED 'some_name';

Beachten Sie, dass Sie brauchen Transaktionsmanager-Software, wenn Sie vorbereitete Transaktionen verwenden, damit alle vorbereiteten Transaktionen, die nach einem Absturz oder einem anderen unerwarteten Problem zurückbleiben, zuverlässig bereinigt werden. Vorbereitete Transaktionen, die nicht festgeschrieben oder rückgängig gemacht werden, bleiben für immer bestehen und werden mit absoluter Sicherheit Ihre Datenbank beschädigen.