Provided by: postgresql-client-8.4_8.4.11-1_amd64 bug


       CREATE OPERATOR - define a new operator


       CREATE OPERATOR name (
           PROCEDURE = funcname
           [, LEFTARG = lefttype ] [, RIGHTARG = righttype ]
           [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
           [, RESTRICT = res_proc ] [, JOIN = join_proc ]
           [, HASHES ] [, MERGES ]


       CREATE OPERATOR defines a new operator, name. The user who defines an operator becomes its
       owner. If a schema name is given then the operator is created  in  the  specified  schema.
       Otherwise it is created in the current schema.

       The operator name is a sequence of up to NAMEDATALEN-1 (63 by default) characters from the
       following list:

       + - * / < > = ~ ! @ # % ^ & | ` ?

       There are a few restrictions on your choice of name:

       · -- and /* cannot appear anywhere in an operator name, since they will be  taken  as  the
         start of a comment.

       · A  multicharacter  operator  name cannot end in + or -, unless the name also contains at
         least one of these characters:

         ~ ! @ # % ^ & | ` ?

         For example, @- is an allowed operator name, but *- is  not.   This  restriction  allows
         PostgreSQL to parse SQL-compliant commands without requiring spaces between tokens.

       The operator != is mapped to <> on input, so these two names are always equivalent.

       At  least  one of LEFTARG and RIGHTARG must be defined. For binary operators, both must be
       defined. For right unary operators, only LEFTARG should be defined, while for  left  unary
       operators only RIGHTARG should be defined.

       The funcname procedure must have been previously defined using CREATE FUNCTION and must be
       defined to accept the correct number of arguments (either one or  two)  of  the  indicated

       The  other  clauses  specify  optional  operator  optimization  clauses.  Their meaning is
       detailed in in the documentation.


       name   The name of the operator to be defined. See above  for  allowable  characters.  The
              name can be schema-qualified, for example CREATE OPERATOR myschema.+ (...). If not,
              then the operator is created in the current  schema.  Two  operators  in  the  same
              schema  can  have  the  same  name if they operate on different data types. This is
              called overloading.

              The function used to implement this operator.

              The data type of the operator's left operand, if any.  This option would be omitted
              for a left-unary operator.

              The  data  type  of  the  operator's  right  operand, if any.  This option would be
              omitted for a right-unary operator.

       com_op The commutator of this operator.

       neg_op The negator of this operator.

              The restriction selectivity estimator function for this operator.

              The join selectivity estimator function for this operator.

       HASHES Indicates this operator can support a hash join.

       MERGES Indicates this operator can support a merge join.

       To give a schema-qualified operator name in com_op or the other  optional  arguments,  use
       the OPERATOR() syntax, for example:

       COMMUTATOR = OPERATOR(myschema.===) ,


       Refer to in the documentation for further information.

       The  obsolete  options  SORT1,  SORT2,  LTCMP, and GTCMP were formerly used to specify the
       names of sort operators associated with a  merge-joinable  operator.  This  is  no  longer
       necessary,  since  information  about  associated  operators is found by looking at B-tree
       operator families instead. If one of these options is given,  it  is  ignored  except  for
       implicitly setting MERGES true.

       Use DROP OPERATOR [drop_operator(7)] to delete user-defined operators from a database. Use
       ALTER OPERATOR [alter_operator(7)] to modify operators in a database.


       The following command defines a new operator, area-equality, for the data type box:

       CREATE OPERATOR === (
           LEFTARG = box,
           RIGHTARG = box,
           PROCEDURE = area_equal_procedure,
           COMMUTATOR = ===,
           NEGATOR = !==,
           RESTRICT = area_restriction_procedure,
           JOIN = area_join_procedure,
           HASHES, MERGES


       CREATE OPERATOR is a PostgreSQL  extension.  There  are  no  provisions  for  user-defined
       operators in the SQL standard.


       ALTER OPERATOR [alter_operator(7)], CREATE OPERATOR CLASS [create_operator_class(7)], DROP
       OPERATOR [drop_operator(7)]