The following bug has been logged online:
Bug reference: 4767
Logged by: fduerr
Email address: fduerr@gmx.de
PostgreSQL version: 8.3.x 8.4.b1
Operating system: Debian Lenny
Description: create operator - negator doesn't work
Details:
Hi,
my apologies beforehand in case i'm just too stupid to understand the
documentation...
i understand, that the operator's negator argument specifies the operator
that, when applied with the same operands, yields the inverted result.
So thats what i did:
CREATE OR REPLACE FUNCTION eq_int_bool(INTEGER, BOOLEAN) RETURNS BOOLEAN AS
'SELECT CAST($1 AS BOOLEAN)=$2;' LANGUAGE SQL IMMUTABLE;
CREATE OPERATOR = (
LEFTARG=INTEGER,
RIGHTARG=BOOLEAN,
PROCEDURE=eq_int_bool,
COMMUTATOR= = ,
NEGATOR= <>
);
And thats, what i got:
SELECT 1=false;
?column?
----------
f
(1 row)
SELECT 1<>false;
8.3.x: ERROR: cache lookup failed for function 0
8.4b1: ERROR: operator is only a shell: integer <> boolean
The workaround is, of course, to define an operator with '<>' as commutator
that returns the negated result. Still i wonder: is it me, the documentation
or pg?