Title: Re: [BUGS] BUG #1715: dbmirror replaces nextval, setval functions
I wouldn't say that requiring that dbmirror not break all serial fields in the entire database is a special requirement!
 
The pending.so library that is compiled prior to running dbmirror would also have to be updated, since it refers to nextval and setval as well.
 
As far as the actual mirroring of the database, it's working great. It's the way that it changes the database when it is intalled that I think it is a bug. And I could attempt to fix it with my meager knowledge of postgres and c, but I don't think I'd be confident to submit an official fix for it.
 
James
-----Original Message-----
From: Achilleus Mantzios [mailto:[EMAIL PROTECTED]
Sent: Mon 6/13/2005 2:59 AM
To: James Doherty
Cc: pgsql-bugs@postgresql.org
Subject: Re: [BUGS] BUG #1715: dbmirror replaces nextval, setval functions

O James Doherty έγραψε στις Jun 10, 2005 :

>
> The following bug has been logged online:
>
> Bug reference:      1715
> Logged by:          James Doherty
> Email address:      [EMAIL PROTECTED]
> PostgreSQL version: 8.0.3
> Operating system:   Solaris 8 Intel
> Description:        dbmirror replaces nextval, setval functions
> Details:
>
> The dbmirror contrib program replaces some key functions when setting up the
> Mirroring table (MirrorSetup.sql). The nextval and setval functions are
> renamed as nextval_pg and setval_pg and replaced with new functions.
>
> This breaks any fields made with the SERIAL datatype, which have to be
> ALTER'ed to use the nextval_pg and setval_pg functions to work properly.
>
>
> Here's the offending code in MirrorSetup.sql:
> UPDATE pg_proc SET proname='nextval_pg' WHERE proname='nextval';
>
> CREATE FUNCTION pg_catalog.nextval(text) RETURNS int8  AS
> '$libdir/pending.so', 'nextval' LANGUAGE 'C' STRICT;
>
>
> UPDATE pg_proc set proname='setval_pg' WHERE proname='setval';
>
> CREATE FUNCTION pg_catalog.setval("unknown",integer,boolean) RETURNS int8
> AS
> '$libdir/pending.so', 'setval' LANGUAGE 'C' STRICT;
> CREATE FUNCTION pg_catalog.setval("unknown",integer) RETURNS int8  AS
> '$libdir/pending.so', 'setval' LANGUAGE 'C' STRICT;

You are right, since dbmirror mirrors tables based on whether
the recordchange trigger is present, whereas it seems
to mirror sequences unconditionally.

You could rename dbmirror's setval,nextval to
dbmirror_setval,dbmirror_nextval, and leave
postgresql's original functions as is.

Just a note tho:
Dbmirror is a great tool, but someone needs to hack a great deal
of code to meet his/her special requirements.

--
-Achilleus

Reply via email to