Chapitre 4. Opérateurs

Table des matières
Priorité lexicale
Opérateurs généraux
Opérateurs numériques
Opérateurs géométriques
Opérateurs Time Interval
Opérateurs CIDR IP V4
Opérateurs INET IP V4

Décrit les opérateurs natifs disponibles dans Postgres.

Postgres fournit un grand nombre d'opérateurs natifs sur les types système. Ces opérateurs sont déclarés dans le catalogue système pg_operator. Chaque entrée dans pg_operator inclut le nom de la procédure qui implémente l'opérateur et les classes OID des types entrée et sortie.

Pour voir toutes les variations de l'opérateur chaîne de concaténation "||", essayez:
    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)
   

Les utilisateurs doivent invoquer les opérateurs en utilisant le nom d'opérateur comme suit:
select * from emp where salary < 40000;
   
Alternativement, les utilisateurs peuvent appeler les fonctions qui implémentent les opérateurs. Dans ce cas la requête sera :
select * from emp where int4lt(salary, 40000);
   

psql possède une commande (\dd) pour lister ces opérateurs.

Priorité lexicale

Les priorités des opérateurs sont codées en dur dans l'analyseur d'entrées SQL (parser). La plupart des opérateurs ont la même précédence et sont non-associatifs. Ceci peut conduire à un comportement difficile à prévoir si l'on ignore cette règle, par exemple les opérateurs booléens "<" et ">" ont une priorité différente des opérateurs booléens "<=" et ">=".

Tableau 4-1. Operateurs de tri (priorité décroissante)

ElementPrecedenceDescription
UNIONleftconstruction SQL
:: type Postgres
[ ]leftdélimiteurs de tableaux
.leftdélimiteur de table/colonne
-rightunary minus
;leftterminaison de commande, logarithme
:rightexponentiation
|leftdébut d'un intervalle
* / %leftmultiplication, division
+ -leftaddition, soustraction
IS test pour TRUE, FALSE, NULL
ISNULL test pour NULL
NOTNULL test pour NOT NULL
(tous les autres opérateurs) natif et utilisateur
IN set membership
BETWEEN contenant
LIKE string pattern matching
< > inégalité booléene
=rightegalité
NOTrightnégation
ANDleftintersection logique
ORleftunion logique