PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 25/01/2012 11:14:03

elfunesto
Membre

insérer une valeur nulle et contrainte check

Bonjour,
j'ai un petit souci pour faire une requête simple sql:
J'ai une table comme ça:
CREATE TABLE lot_marq
(
  "Lot_ID" integer NOT NULL
  "Couleur_Milieu" character varying(50), -- Couleur de la VIE milieu ("JAUNE","ROUGE","ROSE","VERT","BLEU","ORANGE"),
  CONSTRAINT cle_lot PRIMARY KEY ("Lot_ID"),
  CONSTRAINT couleur_milieu CHECK ("Couleur_Milieu"::text = ANY (ARRAY['JAUNE'::character varying, 'ROUGE'::character varying, 'ROSE'::character varying]))
)


Quand j'essaie d'insérer une valeur avec une requête comme ça, ça marche
insert into lot_marq values (32,"ROUGE"); --syntaxe 1
insert into lot_marq ("Lot_ID") values (22); --syntaxe 2

Par contre si je fais
insert into lot_marq values (32,NULL); --syntaxe 3

ça ne marche pas. Or en lisant la doc http://www.postgresql.org/docs/8.1/stat … aints.html , et notamment ce paragraphe "It should be noted that a check constraint is satisfied if the check expression evaluates to true or the null value. Since most expressions will evaluate to the null value if any operand is null, they will not prevent null values in the constrained columns. To ensure that a column does not contain null values, the not-null constraint described in the next section can be used." je m'attendais à ce que ça marche. Est-ce qu'il y a quelque chose que je fais mal? Je peux toujours utiliser la syntaxe 2 mais dans mon cas précis ça complique pas mal mon programme...
Merci d'avance

Hilaire

Dernière modification par elfunesto (25/01/2012 11:46:24)

Hors ligne

#2 25/01/2012 11:37:08

Marc Cousin
Membre

Re : insérer une valeur nulle et contrainte check

Une fois corrigées les requêtes, on constate que ça marche très bien. La seule raison pour laquelle la syntaxe 3 est refusée, c'est qu'il y a déjà un Lot_ID à 32.


Marc.

Hors ligne

#3 25/01/2012 11:39:44

elfunesto
Membre

Re : insérer une valeur nulle et contrainte check

Bonjour,
Merci pour la réponse mais non, le problème n'est pas là
insert into lot_marq values (42,NULL); --syntaxe 3
ne marche pas plus malheureusement (le 32 n'était qu'à titre d'exemple). je reçois un message d'erreur mentionnant "la nouvelle ligne viole la contrainte de vérification « lot_marq » de la relation « couleur_milieu »"
Hilaire

Hors ligne

#4 25/01/2012 11:48:56

elfunesto
Membre

Re : insérer une valeur nulle et contrainte check

Rebonjour,
Autant pour moi, je dois avoir un problème dans ma base car sur une table simplifiée ça marche...
Je vais essayer de voir ça.
Désolé!
Hilaire

Hors ligne

#5 25/01/2012 14:48:24

elfunesto
Membre

Re : insérer une valeur nulle et contrainte check

ok problème résolu, l'erreur venait effectivement d'un autre point de ma requête... Désolé du dérangement pour rien...
Hilaire

Hors ligne

#6 25/01/2012 15:20:06

Marc Cousin
Membre

Re : insérer une valeur nulle et contrainte check

Pas de souci smile


Marc.

Hors ligne

Pied de page des forums