Operadores

Describe los operadores propios disponibles en Postgres.

Postgres proporciona un gran número de tipos de operadores. Estos operadores están declarados en el catálogo del sistema pg_operator. Cada entrada en pg_operator incluye el nombre del procedimiento que implementa el operador y las clases OIDs de los tipos de entrada y salida.

Para ver todas las variantes del operador de concatenación de strings "||" pruebe,

    SELECT oprleft, oprright, oprresult, oprcode
    FROM pg_operator WHERE oprname = '||';

oprleft|oprright|oprresult|oprcode
-------+--------+---------+-------
     25|      25|       25|textcat
   1042|    1042|     1042|textcat
   1043|    1043|     1043|textcat
(3 rows)
   

Los usuarios pueden invocar a los operadores utilizando el nombre del operador de este modo:

select * from emp where salary < 40000;
   
De otra manera, los usuarios pueden llamar a las funciones que implementan los operadores directamente. En este caso la pregunta anterior se haría así:
select * from emp where int4lt(salary, 40000);
   

psql tiene un comando (\dd) para mostrar estos operadores.

Lexical Precedence

Los operadores tienen una precedencia que está codificada dentro del parser. La mayoría de los operadores tienen la misma precedencia y son asociativos. Esto puede acarrear comportamientos poco intuitivos. Por ejemplo, los operadores booleanos "<" y ">" tienen una precedencia diferente que los operadores booleanos "<=" y ">=".

Tabla 1. Orden de operadores (precedencia decreciente)

ElementoPrecedenciaDescripción
UNIONizquierdaconstructor SQL de select
:: conversor de tipos de Postgres
[ ]izquierdadelimitadores de array
.izquierdadelimitadores de tabla/columna
-derechamenos unario
;izquierdaterminación de declaración, logaritmo
:derechaexponenciación
|izquierdacomienzo de intervalo
* / %izquierdamultiplicación, división
+ -izquierdaadición, substracción
IS test para TRUE, FALSE, NULL
ISNULL test para NULL
NOTNULL test para NOT NULL
(todos los demás operadores) nativos y definidos por el usuario
IN fijar miembro
BETWEEN continente
LIKE concordancia de patrones de strings
< > desigualdad booleana
=derechaigualdad
NOTderechanegación
ANDizquierdaintersección lógica
ORizquierdaunión lógica