Cette question est vaguement basé hors How can I create a constraint to check if an email is valid in postgres?Postgresql expression régulière en caractères plutôt que contrainte de vérification
Je sais que je peux utiliser un type de chaîne et la contraindre par une contrainte de vérification:
CREATE TABLE emails (
email varchar
CONSTRAINT proper_email CHECK (email ~* '^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+[.][A-Za-z]+$')
);
Cependant, je voudrais être en mesure de créer un type personnalisé de sorte que la syntaxe serait la suivante
create table emails (
email email_address
);
j'aurais pensé que CREATE TYPE serait utile ici, mais puisque ce n'est pas un composite, gamme ou enum type, je ne sais pas comment je l'aborderais. Pour l'anecdote, c'est parce que j'ai plusieurs tables avec la même contrainte de vérification. J'aimerais modifier la contrainte en un point (par un type peut-être) plutôt que de parcourir toutes les tables une par une. Je pense que cela pourrait aussi rendre les définitions des tables beaucoup plus belles (ce n'est pas pour les emails, mais c'est directement applicable si elles ont été résolues pour un type "email_address").
Le documentation indique que vous pouvez effectuer une autobox d'une chaîne à un certain type en utilisant une fonction d'entrée et de sortie. Peut-être que si je soulève une exception à la réception d'un cstring invalide, cela pourrait être fait pour fonctionner de cette façon, mais cela semble être un marteau, d'autant plus que je veux quand même que ce soit une corde après tout; juste un peu de sucre syntaxique/déduplication.
C'est à peu près aussi parfait une réponse que je pouvais espérer. Merci! –