Thread: BUG #5417: intarray adds <@ operator which breaks infromation_schema.referential_constraints
BUG #5417: intarray adds <@ operator which breaks infromation_schema.referential_constraints
From
"Kenaniah Cerny"
Date:
The following bug has been logged online: Bug reference: 5417 Logged by: Kenaniah Cerny Email address: kenaniah@gmail.com PostgreSQL version: 8.4.2 - 9.0 Operating system: linux Description: intarray adds <@ operator which breaks infromation_schema.referential_constraints Details: Attempting to select * from information_schema.referential_constraints when the intarray contrib module is loaded on a database produces the following result: >ERROR: operator is not unique: smallint[] <@ smallint[] >LINE 1: select $1 <@ $2 and $2 <@ $1 > ^ >HINT: Could not choose a best candidate operator. You might need to add explicit type casts. >QUERY: select $1 <@ $2 and $2 <@ $1 >CONTEXT: SQL function "_pg_keysequal" during inlining It is expected that this is due to intarray defining its own version of the <@ operator. Steps to reproduce: >select * from >information_schema.referential_constraints; --success >begin; >\i /usr/local/.../share/contrib/_int.sql; >select * from information_schema.referential_constraints; --failure >rollback; This bug has been verified in versions 8.4.2, 8.4.3, and 9.0-dev and has not been checked in other versions yet.
Re: BUG #5417: intarray adds <@ operator which breaks infromation_schema.referential_constraints
From
Tom Lane
Date:
"Kenaniah Cerny" <kenaniah@gmail.com> writes: > Attempting to select * from information_schema.referential_constraints when > the intarray contrib module is loaded on a database produces the following > result: >> ERROR: operator is not unique: smallint[] <@ smallint[] >> LINE 1: select $1 <@ $2 and $2 <@ $1 Thanks for the report. I've applied a patch for this in HEAD. If you need to make it work in existing releases, try doing CREATE OR REPLACE FUNCTION information_schema._pg_keysequal(smallint[], smallint[]) RETURNS boolean LANGUAGE sql IMMUTABLE -- intentionally not STRICT, to allow inlining AS 'select $1 operator(pg_catalog.<@) $2 and $2 operator(pg_catalog.<@) $1'; as superuser. regards, tom lane