PostgreSQL supports left unary,
   right  unary,  and  binary
   operators.   Operators  can  be  overloaded; that is,
   the same operator name can be used for different operators
   that have different numbers and types of operands.   If
   there  is  an ambiguous situation and the system cannot
   determine the correct operator to use, it  will  return
   an  error.  You may have to type-cast the left and/or
   right operands to help it understand which operator you
   meant to use.
  
   Every operator is "syntactic sugar" for a call to an
   underlying function that does the real work; so you must
   first create the underlying function before you can create
   the operator.  However, an operator is not merely
   syntactic sugar, because it carries additional information
   that helps the query planner optimize queries that use the
   operator.  Much of this chapter will be devoted to explaining
   that additional information.