From: | "David E(dot) Wheeler" <david(at)kineticode(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | ERROR: cache lookup failed for function 0 |
Date: | 2008-10-22 19:33:59 |
Message-ID: | C43141E7-2EC6-491B-8CE2-A569AE53576B@kineticode.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Howdy,
I ran into this error on 8.2 a while ago, and just figured out what
was causing it. Here's a quick example on 8.2:
BEGIN;
-- Compare name[]s more or less like 8.3 does.
CREATE OR REPLACE FUNCTION namearray_text(name[])
RETURNS TEXT AS 'SELECT textin(array_out($1));'
LANGUAGE sql IMMUTABLE STRICT;
CREATE CAST (name[] AS text) WITH FUNCTION namearray_text(name[]) AS
IMPLICIT;
CREATE OR REPLACE FUNCTION namearray_eq( name[], name[] )
RETURNS bool
AS 'SELECT $1::text = $2::text;'
LANGUAGE sql IMMUTABLE STRICT;
CREATE OPERATOR = (
LEFTARG = name[],
RIGHTARG = name[],
NEGATOR = <>,
PROCEDURE = namearray_eq
);
SELECT '{foo}'::name[] <> '{bar}'::name[];
ROLLBACK;
If you comment out the NEGATOR line, the error is changed to the more
useful
ERROR: operator is not unique: name[] <> name[]
I'm assuming that, if you did this for 8.3 (which has name[]
comparison operators in core, so it'd have to be an operator with some
other type), you'd get the same useless error.
Ideally, in the situation where a NEGATOR (or commutator, too?) is
specified but has not actually been defined, you'd get an error such as:
ERROR: operator not defined: name[] <> name[]
Thanks,
David
From | Date | Subject | |
---|---|---|---|
Next Message | Jeff Frost | 2008-10-22 22:11:47 | BUG #4491: regression in gist indexes |
Previous Message | Teodor Sigaev | 2008-10-22 13:20:27 | Re: BUG #4479: Incorrect TSearch2 results when inserting after deleting |