[Bucardo-general] bucardo internals and updates
marechal.sylvain2 at gmail.com
Mon Apr 27 15:49:40 UTC 2015
We are using bucardo in multi master mode (all databases are "source"
database) to replicate our technical database. In this configuration,
there are 2 machines: one has the slave role (it does not update the
tables as long as it is the slave) and other is master (it updates the
For one of the table named events, the master may add or remove or
updates rows. On both the master and the slave, we have built a system
based on the postgres NOTIFY to act accordingly to those modifications
to quickly detect changes without polling the events table.
1) About rows updates:
I understand that lines updates are replicated on the slave by first
removing all impacted lines then by adding the updated (master) lines. I
guess this is done inside a transaction, so I guess it is never possible
to have one race condition that would show the temporary deleted lines
as deleted lines while getting the content of the events table "at the
same time" it is updated by bucardo ? In other words, after an update on
the master, a single "select * from events" on the slave will never
display less lines than there are on the master even if the select is
done "in the middle of" the bucardo replication job.
Am I right ?
2) About notifications, add/remove and always trigger:
Each time a modification (add/remove/update) is done on a row, a trigger
is called and notifies about the change. To make sure that notifications
are sent on the slave, we have updated the triggers as always trigger.
This works for add and remove, but as an update is done with delete
followed by copy, we have some difficulties to make the distinction
between a "real" add, a "real" remove and an update that leads to
Any ideas about that?
Thanks and regards,
More information about the Bucardo-general