IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

[PHP-PostgreSQL] création de table


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Points : 80
    Points
    80
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Points : 80
    Points
    80
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    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

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Points : 80
    Points
    80
    Par défaut
    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+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] PHP, Création des tables
    Par horse dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/04/2010, 23h52
  2. Création de tables PostgreSQL
    Par choko83 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/04/2009, 12h30
  3. [SQL-Server] Problème query création de tables sous PHP
    Par DjSoulz dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/03/2007, 22h18
  4. [PostgreSQL] [PostGreSQL] Création d'une bdd avec PHP
    Par damien150 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/03/2007, 16h13
  5. Création de tables avec postgresql
    Par angiosfr dans le forum JDBC
    Réponses: 6
    Dernier message: 28/09/2005, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo