FirebirdSQL / firebird

Firebird server, client and tools
https://www.firebirdsql.org/
1.19k stars 205 forks source link

Improve conflict resolution on replica when table have both Primary and Unique keys #8042

Closed hvlad closed 2 months ago

hvlad commented 2 months ago

The setup is the same as in #8040:

Currently, PK violation on insert is resolved by updating conflicting record, using the PK fields values.

But case with UK violation can't be resolved as engine tries to find record for update using PK and such record obviously can't be found, thus original error is returned. This stops replication until manual correction by DBA.

Improvement is to update record using not PK but the unique index that was violated on insert. In this case record exists and can be updated. Replication process will continue.

aafemt commented 2 months ago

Do I assume right that you update PK values to new ones?

hvlad commented 2 months ago

Do I assume right that you update PK values to new ones?

Sure.

aafemt commented 2 months ago

If it is prohibited by some FK which error is returned by IReplicator::process()? Original UK violation or snowballed FK violation?

hvlad commented 2 months ago

I suppose, FK violation. Didn't check it.

pavel-zotov commented 2 months ago

@@@ QA issue @@@ Test not needed, see test for #8040