|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mai 2004 Messages : 7 ![]() |
Salut, je suis actuellement en train de réaliser un module applicatif utilisant une base PostgreSQL. J'aimerais ajouter quelques champs dans les tables existantes et les spécifier "NOT NULL".
J'ai installé phpPgAdmin pour simplifier les modifications éventuelles de la base et je voulais donc m'en servir pour modifier mes champs. Oui mais voilà, dès que j'en crée un en spécifiant "NOT NULL", phpPgAdmin (ou Postgre) me dit ça : Code :
J'ai tenté quelques requêtes SQL avec "ALTER TABLE" et "ADD CONSTRAINT" mais ça n'a rien donné de probant Ai-je mal cherché ? Quelqu'un sait-il comment s'y prendre ? Autant de questions qui me trottent dans la tête Merci d'avance pour vos réponses 8) |
||
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : juin 2003 Messages : 209 ![]() |
La syntaxe est la suivante:
Code :
Code :
ALTER TABLE table1 ALTER col1 SET NOT NULL; |
||
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : mai 2004 Messages : 7 ![]() |
J'avais déjà tenté cette manip mais en ayant des "NULL" dans ma colonne, je viens de la reessayer après les avoir renseigné :
Code :
ALTER TABLE users ALTER typeuser SET NOT NULL; Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : juin 2003 Messages : 209 ![]() |
Fait un et redonne moi la structure de ta table, stp!
A+ |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : mai 2004 Messages : 7 ![]() |
Malheureusement je n'ai pas accès aux commandes psql à partir de mon poste (stagiaire dans la boite).
Par contre si tu veux la structure de la table, je peux te la fournir : Code :
Petite précision tout de même : j'aimerais bien éviter de supprimer la table avec toutes les informations dedans Ca m'éviterait de faire des export/import, mais si il n'y a que ça comme solution... :o |
||
|
|
00
|
|
|
#6 | ||
|
Membre actif
![]() Inscription : juin 2003 Messages : 209 ![]() |
Hello,
Je ne comprend pas trop pourquoi mettre une valeur par défaut de '' (vide)... cela revient à mettre des valeurs nulles, mais avec les désaventage que cela implique... Quoiqu'il en soit, j'ai créé ta table et j'ai réussi à faire un alter: Code :
|
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mai 2004 Messages : 7 ![]() |
Effectivement c'est strange
Oui je travaille avec phpPgAdmin (bien obligé, j'ai que ça, même pas une console, snif )Info : oui je sais bien que le coup du "DEFAULT" est con mais j'ai comme instruction de modifier au minimum la structure actuelle Bon si tu me dis que tu y es arrivé c'est que c'est faisable, je pense que c'est phpPg qui fout la merde J'irais embêter l'admin pour qu'il me mette une console 8) Je vais attendre un peu avant de mettre résolu sur mon post au cas où qulqu'un sache si phpPgAdmin est le fautif dans l'histoire .Merci pour la commande, ça me servira quand même je pense |
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
phpPgAdmin n'y est pour rien : il n'est pas possible avec PostgreSQL 7.3 de spécifier une contrainte NOT NULL en même temps que la création d'un champ avec ALTER TABLE. Je crois que ca l'est avec la 7.4, mais je suis pô sur...
La seule solution que j'ai trouvée : 1) Créer le champ dans la table : Code :
ALTER TABLE ta_table ADD COLUMN VARCHAR ton_champ; Code :
ALTER TABLE ta_table ADD CONSTRAINT ta_contrainte CHECK (ton_champ IS NOT NULL) |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
phpPgAdmin n'y est pour rien : il n'est pas possible avec PostgreSQL 7.3 de spécifier une contrainte NOT NULL en même temps que la création d'un champ avec ALTER TABLE. Je crois que ca l'est avec la 7.4, mais je suis pô sur...
Une solution possible : 1) Créer le champ dans la table : Code :
ALTER TABLE ta_table ADD COLUMN VARCHAR ton_champ; Code :
ALTER TABLE ta_table ADD CONSTRAINT ta_contrainte CHECK (ton_champ IS NOT NULL) |
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : mai 2004 Messages : 7 ![]() |
Vu que je bosse en 7.2.1, je comprends mieux pourquoi ça merde
Bon, j'ai essayé ta synatxe pour le "ADD CONSTRAINT" mais ça merde encore !!! Je tape ça : Code :
ALTER TABLE users ADD CONSTRAINT users_idtypeuser CHECK (idtypeuser IS NOT NULL); Code :
J'ai aussi essayé de mettre des "" autour du nom des tables et des champs mais y veut toujours pô Est-ce que c'est spécifique à une version antérieure à la 7.3 ? |
||
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
7.2.1 !? tu devrais conseiller à ton DB Admin de passer au moins en 7.3 ...
En ce qui concerne ton problème, j'ai juste oublié de te préciser une chose : quand tu ajoutes une contrainte sur une table, Postgres vérifie avant que tous les enregistrements déjà présents dans la table seront cohérents avec ta contrainte. Si c'est pas le cas, il proteste (avec le message que tu as eu). Tu dois donc avoir des enregistrements avec le champ idtypeuser à NULL. Pour pouvoir appliquer ta contrainte, tu dois donc avant initialiser ces champs avec une valeur quelconque, avec une requête du style (si idtypeuser est de type numérique) : Code :
UPDATE users SET idtypeuser = 0 WHERE idtypeuser IS NULL |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : mai 2004 Messages : 7 ![]() |
Oyo !
Bon, avec ta requête de remplissage avec des 0, j'ai réussi à mettre en place la contrainte Code :
ALTER TABLE users ADD CONSTRAINT users_idtypeuser CHECK (idtypeuser IS NOT NULL); Juste un truc rigolo avec Postgre 7.2.1, quand tu ne renseignes pas le champ 'idtypeuser', j'ai l'impression qu'il contourne la contrainte parce qu'il met de lui même 0 :o Donc je pense que la contrainte met une valeur par défaut sur ce champ mais bon, c'est déjà pas mal 8) Allez, à plus tard sur le board les gens et encore à tous |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com