Re: BUG #1715: dbmirror replaces nextval, setval functions

From: "James Doherty" <JDoherty(at)yak(dot)ca>
To: "Achilleus Mantzios" <achill(at)matrix(dot)gatewaynet(dot)com>
Cc: <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #1715: dbmirror replaces nextval, setval functions
Date: 2005-06-13 15:28:00
Message-ID: 6821EB3812B51A478DA36DE250D983288C01CC@fs7ottawa.yak.ca
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

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:achill(at)matrix(dot)gatewaynet(dot)com]
Sent: Mon 6/13/2005 2:59 AM
To: James Doherty
Cc: pgsql-bugs(at)postgresql(dot)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: jdoherty(at)yak(dot)ca
> 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

Browse pgsql-bugs by date

  From Date Subject
Next Message Kevin Grittner 2005-06-13 15:39:51 Re: BUG #1712: JDBC column precision for bigint is 0
Previous Message Tom Lane 2005-06-13 14:25:01 Re: Bug#311533: Invalid timestamp returned because of timezone