[clug] Postgres sync / duplication
Paul Wayper
paul.wayper at anu.edu.au
Mon May 8 01:38:59 GMT 2006
Robert Edwards wrote:
> This is such an artificially restricted situation, that it is hard to
> imagine how it would apply in real life, but, given the scenario, you could run a job when
> the user logs out that:
> - inspects the logs on each PostgreSQL server looking for inserts,
> updates and deletes
> - determines in which direction the syncs need to take place
> (checkpoint each log)
> - apply the equivalent inserts, updates and deletes to the other server
>
A company that I worked for in Melbourne did something like this (with
Ingres, too). Replication for us was having a local site where data was
entered in, and then a remote site that would be kept as a mirror or
archive of the local site. You could do what you wanted on the remote
site and it would never be replicated back. It worked like this:
Have a 'replication' table for each table to be replicated, that just
contains the unique ID fields of the replicated table. The replication
table is not a unique index, though, so it can have multiple rows.
Have a trigger that runs on insert or update that calls a stored
procedure to insert the same unique ID into the replication table.
The replication process (run each night, for example), does something like:
CREATE TEMPORARY TABLE replicated_table_temp AS
SELECT * FROM replicated_table WHERE unique_id IN
(SELECT DISTINCT unique_id FROM replicated_table_replication)
COPY replicated_table_temp TO FILE AS "replicated_table.repl.txt"
DROP TABLE replicated_table_temp
Then you copy the created text file over to the remote server, load it
into the database as a temporary table, delete any rows from the
replicated table that exist in the replication copy, insert the
replicated copy in, and drop the temporary table again.
The actual replication script was a piece of Perl written before the
days of DBI, so all the database calls involved echoing a command to the
sql interpreter, redirecting the output into a text file, reading the
text file and working out what the results were. It was bizarre.
When I pointed out that it doesn't cope with deletes, Development made
it even more bizarre by having a separate module that was used in the
original, and _did_ use the DBI by passing the database handle around as
a parameter to most of the functions. It was a classic example of
Development not understanding the language they were writing in. The
fact that I had to support it and knew more about Perl and the DBI than
they did made for interesting relations.
Hope this helps,
Paul
More information about the linux
mailing list