PG 9.2.2, Windows, empty database just curious, redefinition of various operators seems to work nicely but "text to text" operator redefinition (last block down here) seems completely ignored:
set search_path to public; select 'aa'::varchar = 'aa '::varchar; -- returns false create or replace function public.opr_vceqvc(varchar, varchar) returns boolean as $$ select rtrim($1)=rtrim($2) $$ language sql immutable; create operator public.= (leftarg = varchar, rightarg = varchar, procedure = public.opr_vceqvc, commutator = =, negator = <>, restrict = eqsel, join = eqjoinsel, hashes, merges); select 'aa'::varchar = 'aa '::varchar; -- returns true drop operator if exists public.= (varchar, varchar); select 'aa'::text = 'aa '::varchar; -- returns false create or replace function public.opr_txeqvc(text, varchar) returns boolean as $$ select rtrim($1)=rtrim($2) $$ language sql immutable; create operator public.= (leftarg = text, rightarg = varchar, procedure = public.opr_txeqvc, commutator = =, negator = <>, restrict = eqsel, join = eqjoinsel, hashes, merges); select 'aa'::text = 'aa '::varchar; -- returns true drop operator if exists public.= (text, varchar); select 'aa'::text = 'aa '::text; -- returns false create or replace function public.opr_txeqtx(text, text) returns boolean as $$ -- select rtrim($1)=rtrim($2); select true; $$ language sql immutable; create operator public.= (leftarg = text, rightarg = text, procedure = public.opr_txeqtx, commutator = =, negator = <>, restrict = eqsel, join = eqjoinsel, hashes, merges); select 'aa'::text = 'aa '::text; -- ALWAYS RETURNS FALSE! drop operator if exists public.= (text, text); -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs