Обсуждение: BUG #1715: dbmirror replaces nextval, setval functions
The following bug has been logged online:
Bug reference: 1715
Logged by: James Doherty
Email address: jdoherty@yak.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;
O James Doherty Ýãñáøå óôéò Jun 10, 2005 :
>
> The following bug has been logged online:
>
> Bug reference: 1715
> Logged by: James Doherty
> Email address: jdoherty@yak.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.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>
--
-Achilleus
SSB3b3VsZG4ndCBzYXkgdGhhdCByZXF1aXJpbmcgdGhhdCBkYm1pcnJvciBu b3QgYnJlYWsgYWxsIHNlcmlhbCBmaWVsZHMgaW4gdGhlIGVudGlyZSBkYXRh YmFzZSBpcyBhIHNwZWNpYWwgcmVxdWlyZW1lbnQhDQogDQpUaGUgcGVuZGlu Zy5zbyBsaWJyYXJ5IHRoYXQgaXMgY29tcGlsZWQgcHJpb3IgdG8gcnVubmlu ZyBkYm1pcnJvciB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgdXBkYXRlZCwgc2lu Y2UgaXQgcmVmZXJzIHRvIG5leHR2YWwgYW5kIHNldHZhbCBhcyB3ZWxsLg0K IA0KQXMgZmFyIGFzIHRoZSBhY3R1YWwgbWlycm9yaW5nIG9mIHRoZSBkYXRh YmFzZSwgaXQncyB3b3JraW5nIGdyZWF0LiBJdCdzIHRoZSB3YXkgdGhhdCBp dCBjaGFuZ2VzIHRoZSBkYXRhYmFzZSB3aGVuIGl0IGlzIGludGFsbGVkIHRo YXQgSSB0aGluayBpdCBpcyBhIGJ1Zy4gQW5kIEkgY291bGQgYXR0ZW1wdCB0 byBmaXggaXQgd2l0aCBteSBtZWFnZXIga25vd2xlZGdlIG9mIHBvc3RncmVz IGFuZCBjLCBidXQgSSBkb24ndCB0aGluayBJJ2QgYmUgY29uZmlkZW50IHRv IHN1Ym1pdCBhbiBvZmZpY2lhbCBmaXggZm9yIGl0LiANCiANCkphbWVzDQoN CgktLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLSANCglGcm9tOiBBY2hpbGxl dXMgTWFudHppb3MgW21haWx0bzphY2hpbGxAbWF0cml4LmdhdGV3YXluZXQu Y29tXSANCglTZW50OiBNb24gNi8xMy8yMDA1IDI6NTkgQU0gDQoJVG86IEph bWVzIERvaGVydHkgDQoJQ2M6IHBnc3FsLWJ1Z3NAcG9zdGdyZXNxbC5vcmcg DQoJU3ViamVjdDogUmU6IFtCVUdTXSBCVUcgIzE3MTU6IGRibWlycm9yIHJl cGxhY2VzIG5leHR2YWwsIHNldHZhbCBmdW5jdGlvbnMNCgkNCgkNCg0KCU8g SmFtZXMgRG9oZXJ0eSDOrc6zz4HOsc+IzrUgz4PPhM65z4IgSnVuIDEwLCAy MDA1IDoNCgkNCgk+DQoJPiBUaGUgZm9sbG93aW5nIGJ1ZyBoYXMgYmVlbiBs b2dnZWQgb25saW5lOg0KCT4NCgk+IEJ1ZyByZWZlcmVuY2U6ICAgICAgMTcx NQ0KCT4gTG9nZ2VkIGJ5OiAgICAgICAgICBKYW1lcyBEb2hlcnR5DQoJPiBF bWFpbCBhZGRyZXNzOiAgICAgIGpkb2hlcnR5QHlhay5jYQ0KCT4gUG9zdGdy ZVNRTCB2ZXJzaW9uOiA4LjAuMw0KCT4gT3BlcmF0aW5nIHN5c3RlbTogICBT b2xhcmlzIDggSW50ZWwNCgk+IERlc2NyaXB0aW9uOiAgICAgICAgZGJtaXJy b3IgcmVwbGFjZXMgbmV4dHZhbCwgc2V0dmFsIGZ1bmN0aW9ucw0KCT4gRGV0 YWlsczoNCgk+DQoJPiBUaGUgZGJtaXJyb3IgY29udHJpYiBwcm9ncmFtIHJl cGxhY2VzIHNvbWUga2V5IGZ1bmN0aW9ucyB3aGVuIHNldHRpbmcgdXAgdGhl DQoJPiBNaXJyb3JpbmcgdGFibGUgKE1pcnJvclNldHVwLnNxbCkuIFRoZSBu ZXh0dmFsIGFuZCBzZXR2YWwgZnVuY3Rpb25zIGFyZQ0KCT4gcmVuYW1lZCBh cyBuZXh0dmFsX3BnIGFuZCBzZXR2YWxfcGcgYW5kIHJlcGxhY2VkIHdpdGgg bmV3IGZ1bmN0aW9ucy4NCgk+DQoJPiBUaGlzIGJyZWFrcyBhbnkgZmllbGRz IG1hZGUgd2l0aCB0aGUgU0VSSUFMIGRhdGF0eXBlLCB3aGljaCBoYXZlIHRv IGJlDQoJPiBBTFRFUidlZCB0byB1c2UgdGhlIG5leHR2YWxfcGcgYW5kIHNl dHZhbF9wZyBmdW5jdGlvbnMgdG8gd29yayBwcm9wZXJseS4NCgk+DQoJPg0K CT4gSGVyZSdzIHRoZSBvZmZlbmRpbmcgY29kZSBpbiBNaXJyb3JTZXR1cC5z cWw6DQoJPiBVUERBVEUgcGdfcHJvYyBTRVQgcHJvbmFtZT0nbmV4dHZhbF9w ZycgV0hFUkUgcHJvbmFtZT0nbmV4dHZhbCc7DQoJPg0KCT4gQ1JFQVRFIEZV TkNUSU9OIHBnX2NhdGFsb2cubmV4dHZhbCh0ZXh0KSBSRVRVUk5TIGludDgg IEFTDQoJPiAnJGxpYmRpci9wZW5kaW5nLnNvJywgJ25leHR2YWwnIExBTkdV QUdFICdDJyBTVFJJQ1Q7DQoJPg0KCT4NCgk+IFVQREFURSBwZ19wcm9jIHNl dCBwcm9uYW1lPSdzZXR2YWxfcGcnIFdIRVJFIHByb25hbWU9J3NldHZhbCc7 DQoJPg0KCT4gQ1JFQVRFIEZVTkNUSU9OIHBnX2NhdGFsb2cuc2V0dmFsKCJ1 bmtub3duIixpbnRlZ2VyLGJvb2xlYW4pIFJFVFVSTlMgaW50OA0KCT4gQVMN Cgk+ICckbGliZGlyL3BlbmRpbmcuc28nLCAnc2V0dmFsJyBMQU5HVUFHRSAn QycgU1RSSUNUOw0KCT4gQ1JFQVRFIEZVTkNUSU9OIHBnX2NhdGFsb2cuc2V0 dmFsKCJ1bmtub3duIixpbnRlZ2VyKSBSRVRVUk5TIGludDggIEFTDQoJPiAn JGxpYmRpci9wZW5kaW5nLnNvJywgJ3NldHZhbCcgTEFOR1VBR0UgJ0MnIFNU UklDVDsNCgkNCglZb3UgYXJlIHJpZ2h0LCBzaW5jZSBkYm1pcnJvciBtaXJy b3JzIHRhYmxlcyBiYXNlZCBvbiB3aGV0aGVyDQoJdGhlIHJlY29yZGNoYW5n ZSB0cmlnZ2VyIGlzIHByZXNlbnQsIHdoZXJlYXMgaXQgc2VlbXMNCgl0byBt aXJyb3Igc2VxdWVuY2VzIHVuY29uZGl0aW9uYWxseS4NCgkNCglZb3UgY291 bGQgcmVuYW1lIGRibWlycm9yJ3Mgc2V0dmFsLG5leHR2YWwgdG8NCglkYm1p cnJvcl9zZXR2YWwsZGJtaXJyb3JfbmV4dHZhbCwgYW5kIGxlYXZlDQoJcG9z dGdyZXNxbCdzIG9yaWdpbmFsIGZ1bmN0aW9ucyBhcyBpcy4NCgkNCglKdXN0 IGEgbm90ZSB0aG86DQoJRGJtaXJyb3IgaXMgYSBncmVhdCB0b29sLCBidXQg c29tZW9uZSBuZWVkcyB0byBoYWNrIGEgZ3JlYXQgZGVhbA0KCW9mIGNvZGUg dG8gbWVldCBoaXMvaGVyIHNwZWNpYWwgcmVxdWlyZW1lbnRzLg0KCQ0KCS0t DQoJLUFjaGlsbGV1cw0KCQ0KCQ0KDQo=