Problème sur une fonction pour vérifier l'intégrité d'une table
Bonjour à tous,
Je souhaiterais rajouter un "check" sur une de mes tables afin qu'une colonne booléenne ("IsLocalHouse") ne puisse posséder qu'une seule valeur à true.
J'ai donc créé une fonction avec le code pgsql suivant:
Code:
1 2 3 4 5 6 7 8 9 10
| DECLARE
nb_answers BigInt;
BEGIN
SELECT COUNT(*) INTO nb_answers FROM "DATA_STATIC_COUNTERPARTY" WHERE "IsLocalHouse" = true;
IF nb_answers = 1 THEN
RETURN true;
ELSE
RETURN false;
END IF;
END |
Puis je rajoute le check pour que la valeur de cette fonction soit égale à true.
Quand j'ajoute la contrainte, aucun problème: s'il n'y a qu'un seul true, le check se rajoute. S'il y en a plusieurs, une erreur est levée me disant que la condition n'est pas vérifiée.
Jusqu'ici tout va bien.
Par contre, une fois que j'ai rajouté l'exception, je peux mettre à true une seconde et une troisieme valeur de la colonne, et aucune erreur n'est levée. Et quand j'essaye de remettre à false une de ces valeurs (et même pour repasser de 2 valeurs true à une seule), une erreur est levée et m'empêche de modifier la valeur.
Une idée d'où peut venir ce problème très étrange?
Merci!