PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 12.18 » Langage SQL » Types de données » Types domaine

8.18. Types domaine

Un domaine est un type de données défini par l'utilisateur. Il est basé sur un autre type sous-jacent. En option, il peut avoir des contraintes qui restreignent les valeurs valides à un sous-ensemble de ce que permettrait le type sous-jacent. Pour le reste, il se comporte comme le type sous-jacent -- par exemple, tout opérateur ou fonction qui peut être appliqué au type sous-jacent fonctionne avec le domaine. Le type sous-jacent peut être tout type, interne ou défini par l'utilisateur, type enum, type tableau, type composé, type intervalle ou autre domaine.

Par exemple, nous pouvons créer un domaine sur des entiers qui n'accepte que des valeurs positives :

CREATE DOMAIN posint AS integer CHECK (VALUE > 0);
CREATE TABLE mytable (id posint);
INSERT INTO mytable VALUES(1);   -- works
INSERT INTO mytable VALUES(-1);  -- fails
      

Quand un opérateur ou une fonction du type sous-jacent est appliqué à la valeur d'un domaine, le domaine est automatiquement converti vers le type sous-jacent. Donc, par exemple, le résultat de mytable.id - 1 est considéré être de type integer, et non pas posint. Nous pouvons écrire (mytable.id - 1)::posint pour convertir le résultat avec le type posint, causant une nouvelle vérification des contraintes du domaine. Dans ce cas, cela résultera en une erreur si l'expression a été appliquée à une valeur de 1 pour id. Affecter une valeur du type sous-jacent à un champ ou variable du type domaine est autorisé sans forcer une conversion explicite, mais les contraintes du domaine seront vérifiées.

Pour plus d'informations, voir CREATE DOMAIN.