Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2006, 14h31   #1
Nouveau Membre du Club
 
Inscription : mai 2002
Messages : 75
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 75
Points : 32
Points : 32
Par défaut [PHP-PostgreSQL] création de table

Bonjour à tous
Je me mets tout doucement au SQL. Je doit créer une base de données... contenant entre autre une table qui serait de la forme:
Code :
1
2
3
4
5
6
7
CREATE TABLE utilisateurs (
  idUser INTEGER NOT NULL PRIMARY KEY DEFAULT (SELECT MAX(idUser) + 1 FROM utilisateurs),
  strLogin VARCHAR(16) NOT NULL UNIQUE CHECK (CHARACTER_LENGTH(VALUE) > 8),
  strMDP VARCHAR(16) NOT NULL CHECK (CHARACTER_LENGTH(VALUE) > 8),
  iDroits INTEGER NOT NULL
);
... mais bien sur, ça marche pas!
Code :
1
2
3
 
Warning: pg_query() [FUNCTION.pg-query]: Query failed: ERREUR:
Impossible d'utiliser une sous-requête dans l'expression par défaut ...
Pourtant, les sous-requêtes sont bien possible non?
Et sinon, quelle est la méthode pour contourner le problème?

Merci
PierrotY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 15h18   #2
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

Citation:
Envoyé par PierrotY
Pourtant, les sous-requêtes sont bien possible non
Oui, mais comme te l'indique PostgreSQL tu ne peux pas les utiliser dans les expressions de valeur par défaut pour les champs d'une table.

La solution à ton problème s'appelle les séquences.
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 15h54   #3
Nouveau Membre du Club
 
Inscription : mai 2002
Messages : 75
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 75
Points : 32
Points : 32
Et ouiii... je crois qu'il doit y avoir une aide psychologique qui nous est apportée rien qu'en postant une question. Ce simple geste suffit à déclencher tout un mécanisme qui souvent apporte rapidement la réponse. Voilà ce pour quoi j'ai opté:
Code :
1
2
3
4
5
6
7
8
9
 
CREATE SEQUENCE idUser_seq MINVALUE 1 MAXVALUE 1000 CYCLE;
 
CREATE TABLE utilisateurs (
  idUser INTEGER NOT NULL PRIMARY KEY DEFAULT NEXTVAL('idUser_seq'),
  strLogin VARCHAR(16) NOT NULL UNIQUE CHECK (CHARACTER_LENGTH(strLogin) > 8),
  strMDP VARCHAR(16) NOT NULL CHECK (CHARACTER_LENGTH(strMDP) > 8),
  iDroits INTEGER NOT NULL
);
NOTA:
- d'après les tutos que j'ai lus, j'avais compris que lors de la création de la table, il aurait fallu mettre:
Code :
1
2
  strMDP VARCHAR(16) NOT NULL CHECK (CHARACTER_LENGTH(VALUE) > 8),
mais en fait, ben nan!
- j'ai laissé les options MINVALUE, MAXVALUE et CYCLE, mais c'est pas forcément approprié dans le cas présent.

Merci quand même GrandFather.
PierrotY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 16h35   #4
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Attention, j'espère que tu as conscience qu'après avoir inséré 1000 enregistrements, la séquence revient à 1 et que la prochaine tentative d'insertion va échouer du fait qu'il y a déjà dans la table un idUser avec la valeur 1 et que tu as placé une contrainte de clé primaire sur ce champ...
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 09h32   #5
Nouveau Membre du Club
 
Inscription : mai 2002
Messages : 75
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 75
Points : 32
Points : 32
Citation:
GrandFather a dit:
... la prochaine tentative d'insertion va échouer ...


En effet! Je n'avais pas vu ta réponse, et je la constate aujourd'hui. En fait, je cherche à faire une table qui serait de taille fixe. Elle ne concerne pas les utilisateurs, mais une table qui stocke des valeurs de mesures. Si j'arrive pas à mes fins, je fais un autre post!

A+
PierrotY est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h18.


 
 
 
 
Partenaires

Hébergement Web