BUG #1715: dbmirror replaces nextval, setval functions

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

BUG #1715: dbmirror replaces nextval, setval functions

James Doherty-2

The following bug has been logged online:

Bug reference:      1715
Logged by:          James Doherty
Email address:      [hidden email]
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;

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [hidden email]
Reply | Threaded
Open this post in threaded view
|

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

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

>
> The following bug has been logged online:
>
> Bug reference:      1715
> Logged by:          James Doherty
> Email address:      [hidden email]
> 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.

>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to [hidden email]
>

--
-Achilleus


---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster
Reply | Threaded
Open this post in threaded view
|

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

James Doherty-2
In reply to this post by James Doherty-2
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:[hidden email]]
Sent: Mon 6/13/2005 2:59 AM
To: James Doherty
Cc: [hidden email]
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:      [hidden email]
> 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