Re: transaction and triggers - Mailing list pgsql-sql

From Gerardo Herzig
Subject Re: transaction and triggers
Date
Msg-id 47948C48.6030002@fmed.uba.ar
Whole thread Raw
In response to Re: transaction and triggers  ("D'Arcy J.M. Cain" <darcy@druid.net>)
List pgsql-sql
D'Arcy J.M. Cain wrote:

>On Fri, 18 Jan 2008 12:16:04 -0300
>Gerardo Herzig <gherzig@fmed.uba.ar> wrote:
>  
>
>>Right.  But  today, that trigger do some other work, wich includes 
>>writing some files to disk, so there is my problem. Crap, i guess i will 
>>have to review the main logic.
>>    
>>
>
>I built a replication system that syncs up dozens of systems in a
>multi-master environment spanning multiple continents in almost
>real-time and it works flawlessly so don't give up hope.
>
And im trying with 3 virtual machines...this is embarrasing :)

>  It is
>doable.  I can't give you the code because it was written under
>contract and it was based heavily on our specific business requirements
>but I can give you a few pointers.
>
>You have discovered the basic problem of trying to replicate in full
>real time.  You'll probably have to give up on that.  Instead, focus on
>making updates to the local database.  Create a replication table or
>tables that you update with triggers.  Basically this needs to be a log
>of every change to the database in a structured way.
>  
>
Crap. That was my first approach! I later chose the inmediate file 
writing, trying to minimize the changes that would be lost in case of 
primary system crash. I guess i will come with it again.

>Once you have the replication table(s) you can create external programs
>that connect to the master and update the slave.  In the slave you can
>track the last ID that completed.  Do the insert/update/delete in a
>transaction so that you have a guarantee that your database is up to
>date to a very specific point.  Note that you can have multiple slaves
>in this scenario and, in fact, the slaves can have slaves using the
>exact same scheme giving you a hierarchy.
>
>If you need multi-master you just need to have another process to feed
>your local changes up to the master.  This is not just a matter of
>making the master a slave though.  If you do that you get into a
>feedback loop.
>
>Also, if you need multi-master, you have to think about your
>sequencing.  If you need unique IDs on some tables you will have to
>think about setting up ranges of sequences based on server or have a
>central sequence server.  We used a combination of both as well as
>specifying that certain tables could only be inserted to on one
>system.  Of course, this system doesn't need to be the same as the top
>of the hierarchy and, in fact, different tables can have different
>generator systems.
>
>  
>
What i want to do is something like:If the master fails, it will be a peace of soft that would change the 
conf files (which indicate who's the master, slaves, and so on), so one 
of the slaves take the master's place. Since those are a common pc, when 
the real master come back to life, it has to be re-sync, and take his 
place as the master again. Im thinking in something as simple as posible 
(since im not a senior programmer), something like a ip address change 
could do the trick

>Hope this gets you started.  There's still lots of gotchas on the way.
>  
>
Oh yes, im specting so much fun!!!!
Thanks for sharing your knowledge with us!!

Mamooth replicator, Slone-I, feel the fear! :)

Thanks again, D'arcy!

Gerardo



pgsql-sql by date:

Previous
From: "Pavel Stehule"
Date:
Subject: Re: Having elements of an int[]-array reference other tables
Next
From: Christian Schröder
Date:
Subject: Re: (possible) bug with constraint exclusion