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

Requêtes PostgreSQL Discussion :

problème avec une séquence


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 17
    Points
    17
    Par défaut problème avec une séquence
    Bonjour,

    J'ai une DB sous postgres 8.4, une table qui s'appelle ldap_groups dont voici la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE TABLE ldap_groups
    (
      ldap_group_id serial NOT NULL,
      ldap_group_customer_id integer NOT NULL,
      ldap_group_name character varying(255) NOT NULL,
      ldap_group_gid integer,
      ldap_group_parent_id integer NOT NULL DEFAULT 0,
      ldap_group_type character varying(32),
      ldap_group_directory_path text,
      ldap_group_description text,
      ldap_group_mail character varying(255),
      ldap_group_valid boolean NOT NULL DEFAULT false,
      CONSTRAINT ldap_group_id PRIMARY KEY (ldap_group_id),
      CONSTRAINT ldap_customer_id FOREIGN KEY (ldap_group_customer_id)
          REFERENCES customers (customer_id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    )
    mon champ ldap_group_id est un sérial et j'ai donc la séquence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE SEQUENCE ldap_groups_ldap_group_id_seq
      INCREMENT 1
      MINVALUE 1
      MAXVALUE 9223372036854775807
      START 1
      CACHE 1;
    Mon problème est le suivant : quand j'insère un groupe avec mon appli en PHP, la première insertion se passe bien, mon groupe est créé, mais la séquence ne se met pas à jour (je vérifie avec SELECT * FROM ldap_groups_ldap_group_id_seq). Last_value reste à 1. Quand j'insère mon 2e groupe, erreur, duplicate key etc, normal puisque la séquence n'a pas bougé.
    Là où ça devient retors, c'est que cette 2e requête d'insertion, qui n'insère rien, incrémente la séquence et du coup à mon 3e essai, mon insertion se passe bien.

    Il doit y avoir une pétouille dans la structure de la table ou de la séquence, mais je ne vois pas où. Est-ce que quelqu'un a une idée de la cause du problème ?
    Merci pour votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Points : 22
    Points
    22
    Par défaut
    Est-ce qu'ont peut voir l'instruction "insert" ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    voilà la chaine de requêtes exécutées (insertion une par une, en passant par un formulaire) :

    1e requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO "ldap_groups" ("ldap_group_customer_id", "ldap_group_name", "ldap_group_type", "ldap_group_description", "ldap_group_mail", "ldap_group_gid", "ldap_group_id", "ldap_group_parent_id") 
    VALUES (1, 'public', 'functional', '', 'public@client.fr', 10000, 1, 0)
    -> insertion ok

    2e requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO "ldap_groups" ("ldap_group_customer_id", "ldap_group_name", "ldap_group_type", "ldap_group_description", "ldap_group_mail", "ldap_group_gid", "ldap_group_parent_id") 
    VALUES (1, 'direction', 'functional', '', 'direction@client.fr', 10001, '1')
    -> erreur :
    ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « ldap_group_id »
    INSERT INTO "ldap_groups" ("ldap_group_customer_id", "ldap_group_name", "ldap_group_type", "ldap_group_description", "ldap_group_mail", "ldap_group_gid", "ldap_group_parent_id")
    VALUES (1, 'direction', 'functional', '', 'direction@client.fr', 10001, '1')
    3e requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO "ldap_groups" ("ldap_group_customer_id", "ldap_group_name", "ldap_group_type", "ldap_group_description", "ldap_group_mail", "ldap_group_gid", "ldap_group_parent_id") 
    VALUES (1, 'direction', 'functional', '', 'direction@client.fr', 10001, '1')
    -> insertion ok

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    je précise que lorsque j'insère un groupe avec cette requête dans PG Admin, la séquence s'incrémente correctement, ça ne doit pas venir de ma structure de base mais de mon code...

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    la première insertion se passe bien, mon groupe est créé, mais la séquence ne se met pas à jour (je vérifie avec SELECT * FROM ldap_groups_ldap_group_id_seq). Last_value reste à 1
    C'est parce que le 1er INSERT mentionne explicitement la colonne ldap_group_id avec une valeur en dur à 1. Dans ce cas, la clause de valeur par défaut n'est pas appelée et la séquence reste en l'état.
    Il faudrait enlever cette colonne de la requête comme c'est d'ailleurs le cas dans le 2eme INSERT.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    ben merdre alors, la colonne group_id n'a rien à faire là ! merci beaucoup de m'avoir aidée à pointer le problème ! je l'enlève et je regarde si ça fonctionne bien.

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

Discussions similaires

  1. Problème avec une UDF
    Par kanmaber dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/08/2004, 23h42
  2. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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