SQL - C’est quoi la contrainte CHECK en SQL sur PostgreSQL ?

SQL - C’est quoi la contrainte CHECK en SQL sur PostgreSQL ?

Date de sortie
October 1, 2024
Auteur
Bertrand Fabre
“Je travaille sur des bases opérationnelles et des fois les utilisateurs insèrent de la mauvaise données. Même si le front évolue, je voudrai directement en place une règle dans mes tables.

Il est tout à fait possible de mettre en place des règles d’intégrité des données.

Comme annoncé dans le titre, je vais vous montrer cela avec la contrainte CHECK sur PostgreSQL.

Cette contrainte CHECK permet d’ajouter une règle, mais je dirai même un test sur les colonnes de votre choix lors de la création de la table.

Au moment où il y aura une opération d’insertion dans la table concernée, il y a une évaluation booléenne si la donnée remplie ou non la condition du CHECK.

Exemple

CREATE TABLE product (
    id SERIAL PRIMARY KEY,
    label VARCHAR(100),
    price NUMERIC CHECK (price > 0 AND price < 99999)
);

Et donc, que se passe-t-il si on essaye d’insérer une donnée ne respectant cette contrainte d’intégrité ?

INSERT INTO product VALUES
	(1, 'Mon super produit', 999.0),
	(2, 'Un autre super produit', 100999) -- Je me suis emballé sur le prix
;

Le résultat :

SQL Error [23514]: ERROR: new row for relation "product" violates check constraint "product_price_check" Détail : Failing row contains (2, Un autre super produit, 100999).

La ligne ne respectant pas la contrainte n’a donc pas été insérée mais l’autre ligne qui respectait bien la contrainte, ne l’a pas été non plus !

⚠️
Il faut donc faire attention si les insertions se font par lot dans la table.

Bien sûr, il faut éviter d’avoir des expressions trop complexes afin de ne pas trop ralentir les opérations d’insertion et de mise à jour dans les tables ayant des contraintes CHECK.

De plus, il penser à indiquer dans une documentation accessible ou directement avec le code le but initial de ces règles d’intégrité.

Merci de votre lecture !