Answering my own question.
Replacing original definition of _pg_keysequal (in information_schema):

CREATE FUNCTION _pg_keysequal(smallint[], smallint[]) RETURNS boolean
    LANGUAGE sql IMMUTABLE  -- intentionally not STRICT, to allow inlining
    AS 'select $1 <@ $2 and $2 <@ $1';

with this one:

CREATE FUNCTION _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';

makes queries like:

select * from information_schema.referential_constraints;

against information_schema.referential_constraints work without errors.

Sorry, for the noise.
Igor Neyman



From: Igor Neyman
Sent: Friday, July 27, 2012 9:27 AM
To: pgsql-general@postgresql.org
Subject: information_schema.referential_constraints broken?

This query:

select * from information_schema.referential_constraints;

under PG 8.4.5 (Windows platform) produces this error message:

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

********** Error **********

ERROR: operator is not unique: smallint[] <@ smallint[]
SQL state: 42725
Hint: Could not choose a best candidate operator. You might need to add 
explicit type casts.
Context: SQL function "_pg_keysequal" during inlining


I don't have more recent 8.4 releases to try it on.
It works fine on PG 9.1.3.

Did anyone else experienced this problem?

Regards,
Igor Neyman

Reply via email to