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; |
select * from emp where int4lt(salary, 40000); |
psql tiene un comando (\dd) para mostrar estos operadores.
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)
Elemento | Precedencia | Descripción |
---|---|---|
UNION | izquierda | constructor SQL de select |
:: | conversor de tipos de Postgres | |
[ ] | izquierda | delimitadores de array |
. | izquierda | delimitadores de tabla/columna |
- | derecha | menos unario |
; | izquierda | terminación de declaración, logaritmo |
: | derecha | exponenciación |
| | izquierda | comienzo de intervalo |
* / % | izquierda | multiplicación, división |
+ - | izquierda | adició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 | |
= | derecha | igualdad |
NOT | derecha | negación |
AND | izquierda | intersección lógica |
OR | izquierda | unión lógica |