Thread: Why are no NEGATORS defined in the standard operators

Why are no NEGATORS defined in the standard operators

From
Daniel Migowski
Date:

Hello,

 

while trying to bake my own fixedpoint datatype I noticed the definition for =(int8,int8) to be

 

CREATE OPERATOR =(

  PROCEDURE = int8eq,

  LEFTARG = int8,

  RIGHTARG = int8,

  COMMUTATOR = =,

  RESTRICT = eqsel,

  JOIN = eqjoinsel,

  HASHES,

  MERGES);

 

in PostgreSQL 9.5, but I wonder, why there is no NEGATOR clause defined here? According to the docs it should help to add

 

  NEGATOR = <>

 

In query optimization. Is there some reason for it? Or is it a Bug in pgAdmin III that the negator is not shown?

 

Regards,

Daniel Migowski

 

Re: Why are no NEGATORS defined in the standard operators

From
Julien Rouhaud
Date:
Hello

On 11/06/2016 10:00, Daniel Migowski wrote:
> Hello,
>
> while trying to bake my own fixedpoint datatype I noticed the definition
> for =(int8,int8) to be
>
>
>
> CREATE OPERATOR =(
>
>   PROCEDURE = int8eq,
>
>   LEFTARG = int8,
>
>   RIGHTARG = int8,
>
>   COMMUTATOR = =,
>
>   RESTRICT = eqsel,
>
>   JOIN = eqjoinsel,
>
>   HASHES,
>
>   MERGES);
>
>
>
> in PostgreSQL 9.5, but I wonder, why there is no NEGATOR clause defined
> here? According to the docs it should help to add
>
>
>
>   NEGATOR = <>
>
>
>
> In query optimization. Is there some reason for it? Or is it a Bug in
> pgAdmin III that the negator is not shown?
>

I guess this is a bug in pgAdmin3, because the negator is defined in the
catalog:

# select o1.oprname, o1.oprcode, o1.oprnegate, o2.oprname as negate from
pg_operator o1 join pg_operator o2 on o1.oprnegate = o2.oid where
o1.oprname = '=' and o1.oprleft = 'int8'::regtype and o1.oprright =
'int8'::regtype;

 oprname │ oprcode │ oprnegate │ negate
═════════╪═════════╪═══════════╪════════
 =       │ int8eq  │       411 │ <>
(1 row)



--
Julien Rouhaud
http://dalibo.com - http://dalibo.org


Re: Why are no NEGATORS defined in the standard operators

From
Daniel Migowski
Date:
OK, I file a bug report. 

-----Ursprüngliche Nachricht-----
Von: Julien Rouhaud [mailto:julien.rouhaud@dalibo.com] 
Gesendet: Samstag, 11. Juni 2016 11:28
An: Daniel Migowski <dmigowski@ikoffice.de>; pgsql-general@postgresql.org
Betreff: Re: [GENERAL] Why are no NEGATORS defined in the standard operators

Hello

On 11/06/2016 10:00, Daniel Migowski wrote:
> Hello,
> 
> while trying to bake my own fixedpoint datatype I noticed the 
> definition for =(int8,int8) to be
> 
>  
> 
> CREATE OPERATOR =(
> 
>   PROCEDURE = int8eq,
> 
>   LEFTARG = int8,
> 
>   RIGHTARG = int8,
> 
>   COMMUTATOR = =,
> 
>   RESTRICT = eqsel,
> 
>   JOIN = eqjoinsel,
> 
>   HASHES,
> 
>   MERGES);
> 
>  
> 
> in PostgreSQL 9.5, but I wonder, why there is no NEGATOR clause 
> defined here? According to the docs it should help to add
> 
>  
> 
>   NEGATOR = <>
> 
>  
> 
> In query optimization. Is there some reason for it? Or is it a Bug in 
> pgAdmin III that the negator is not shown?
> 

I guess this is a bug in pgAdmin3, because the negator is defined in the
catalog:

# select o1.oprname, o1.oprcode, o1.oprnegate, o2.oprname as negate from pg_operator o1 join pg_operator o2 on
o1.oprnegate= o2.oid where o1.oprname = '=' and o1.oprleft = 'int8'::regtype and o1.oprright = 'int8'::regtype;
 

 oprname │ oprcode │ oprnegate │ negate
═════════╪═════════╪═══════════╪════════
 =       │ int8eq  │       411 │ <>
(1 row)



--
Julien Rouhaud
http://dalibo.com - http://dalibo.org