Salut, je n'arrive pas à obtenir une contrainte fonctionnant comme je m'y attend dans postgreSQL. Depuis pgadmin, j'exécute la requête SQL suivante.
-- Check: "TypeCheck"
-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";
ALTER TABLE "ComLog"
ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes');
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Une fois exécuté, il est converti en.
-- Check: "TypeCheck"
-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";
ALTER TABLE "ComLog"
ADD CONSTRAINT "TypeCheck" CHECK ("Type" ~ similar_escape('email|post|IRL|minutes'::text, NULL::text));
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Je m'attends à ce que cela limite mon entrée pour la colonne Types à l'un des messages électroniques IRL ou minutes. Cependant, lors de la saisie de données de table, cette contrainte échoue lorsque j'entre l'un de ces types. La colonne Types est de type caractère. Est-ce que quelqu'un sait comment réparer ceci. Merci.
postgresql
constraint
wookie1
la source
la source
CHECK (type in ('email','post','IRL','minutes')
?Réponses:
Changez votre contrainte en
Ceci sera converti par l'analyseur en:
Cela devrait faire ce que vous regardez.
Cependant, je dois me demander s'il ne serait pas préférable de le faire:
Et puis ajoutez une clé étrangère pour appliquer la contrainte. Cela faciliterait l'ajout de types à l'avenir.
la source