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

#1 05/07/2013 20:13:06

denis33
Membre

insertion impossible avec integer non renseigné

Bonjour, nouveau sous PostgreSQL 9.2.4, j'ai tenté de remplir une petite table :
CREATE TABLE test(
     id    integer PRIMARY KEY,
     nom    varchar(10) ,
     prix   integer
);
la création se passe bien mais lors de l'insertion
INSERT INTO "public"."test" ("id","nom","prix")
                    VALUES ('2','','')
la réponse est:
Erreur SQL :

ERREUR:  syntaxe en entrée invalide pour l'entier : «  »
LINE 2:      VALUES ('2','','')
                                    ^
si je mets une valeur dans prix c'est ok
La même erreur survient en utilisant phpPgAdmin
pourquoi, qu'ai-je mal fait?
merci de vos conseils

Hors ligne

#2 06/07/2013 00:41:26

gleu
Administrateur

Re : insertion impossible avec integer non renseigné

Une chaîne vide n'est pas une valeur entière. Si vous voulez y indiquer une valeur inconnue, utilisez NULL. Sinon indiquez un nombre.


Guillaume.

Hors ligne

#3 06/07/2013 08:24:11

denis33
Membre

Re : insertion impossible avec integer non renseigné

Merci pour la réponse mais comment faites-vous pour insérer NULL. D'après la doc ceci est automatique si le champ est laissé vide.
Avec phpPgAdmin, c'est ce qui se passe pour la chaine mais pas pour l'entier, pourquoi?
La solution pour les nombres serait-elle de cocher la case NULL? cela fonctionne mais c'est fastidieux.

Hors ligne

#4 06/07/2013 09:33:07

gleu
Administrateur

Re : insertion impossible avec integer non renseigné

Merci pour la réponse mais comment faites-vous pour insérer NULL. D'après la doc ceci est automatique si le champ est laissé vide.

Vous n'avez pas laissé le champ vide, vous avez essayé d'y insérer une chaîne vide. Nuance smile

Pour répondre à votre question, si vous indiquez le nom du champ, vous devez indiquer sa valeur, donc :

INSERT INTO "public"."test" ("id","nom","prix") VALUES ('2','', NULL);

Vous pouvez ne pas indiquer sa valeur en n'indiquant pas la colonne, comme ceci :

INSERT INTO "public"."test" ("id","nom") VALUES ('2','');

La colonne prix prendra ainsi la valeur par défaut. Si aucune valeur par défaut n'est indiquée dans la définition de la colonne, elle prendra automatiquement la valeur NULL.

Avec phpPgAdmin, c'est ce qui se passe pour la chaine mais pas pour l'entier, pourquoi?

Je ne connais pas bien phpPgAdmin mais je suppose que vous avez une case à cocher soit pour prendre en compte la colonne, soit pour préciser une valeur NULL. Si vous ne les prenez pas en compte et que vous ne saisissez rien dans le champ, il va renvoyer une chaîne vide, ce qui est suffisant pour une colonne de type texte mais pas pour une colonne de type entier.

La solution pour les nombres serait-elle de cocher la case NULL? cela fonctionne mais c'est fastidieux.

Voilà, c'est donc bien une case NULL. Concernant le "fastidieux", personne n'a prétendu que phpPgAdmin était la meilleure interface pour saisir des données. C'est plutôt une console d'administration.


Guillaume.

Hors ligne

#5 06/07/2013 13:46:39

denis33
Membre

Re : insertion impossible avec integer non renseigné

Réponse très complète dont je vous remercie. Mon erreur venait d'avoir cru que phpPgAdmin savait traiter les colonnes sans données sans autre spécification.

Hors ligne

Pied de page des forums