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 :

[auto-incr�mentation] r�cup�rer la valeur ins�r�e


Sujet :

PostgreSQL

  1. #1
    Membre chevronn�

    D�veloppeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    D�tails du profil
    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Par d�faut [auto-incr�mentation] r�cup�rer la valeur ins�r�e
    Bonjour, je souhaiterai savoir s'il est possible de r�cup�rer la valeur g�n�r�e par postgres, dans le cas d'une clef primaire serial.

    ... et ceci au travers d'une connexion JDBC d'un programme Java.

    Merci d'avance

    Thomas

  2. #2
    Expert confirm�
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    D�tails du profil
    Informations personnelles :
    �ge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par d�faut
    Bonjour,

    Dans la m�me transaction et apr�s ta requ�te INSERT, lance la requ�te :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    select currval('nom_de_la_sequence') as nouv_id;
    nouv_id contiendra la derni�re valeur de la s�quence correspondant � ton champ serial
    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 chevronn�

    D�veloppeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    D�tails du profil
    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Par d�faut
    Ok merci beaucoup. Du coup j'ai une question de newbie : comment puis-je d�terminer le nom de la s�quence ? Il me le donne au moment de la cr�ation de la table c'est �a ? Mais y-a-t'il un moyen de le d�terminer � post�riori ?

  4. #4
    Membre chevronn�

    D�veloppeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    D�tails du profil
    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Par d�faut
    Et dans le cas d'acc�s concurrent, y-a-t'il un risque que la valeur soit p�rim�e quand je la lis ? Ou bien le fait d'y acc�der dans la m�me transaction que l'insert me garantie que �a sera la bonne valeur ?

  5. #5
    Expert confirm�
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    D�tails du profil
    Informations personnelles :
    �ge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par d�faut
    Citation Envoy� par laffreuxthomas
    comment puis-je d�terminer le nom de la s�quence ? Il me le donne au moment de la cr�ation de la table c'est �a ? Mais y-a-t'il un moyen de le d�terminer � post�riori ?
    Tu peux d�duire le nom de la s�quence en ajoutant le suffixe '_seq' au nom de ton champ serial (tu as �galement la possibilit� de cr�er ta s�quence manuellement et de choisir son nom, mais c'est rarement utile)
    Et dans le cas d'acc�s concurrent, y-a-t'il un risque que la valeur soit p�rim�e quand je la lis ?
    D'autres sessions peuvent effectivement faire appel entre temps � la fonction nextval(), qui incr�mente la s�quence et renvoie la nouvelle valeur. Cependant, nextval() est atomique et renvoie une valeur distincte du compteur � chaque session qui l'utilise. Il n'y a donc pas de risque de conflits entre les sessions. Par contre, tu n'as pas de garantie que le num�ro renvoy� par currval() est bien celui actuellement enregistr� dans la s�quence. Mais ce n'est pas grave, car tu es en revanche s�r que c'est bien celui renvoy� par le dernier nextval() dans ta session.
    Ou bien le fait d'y acc�der dans la m�me transaction que l'insert me garantie que �a sera la bonne valeur ?
    L'inclusion de currval() dans une transaction n'est en rien une obligation et n'est qu'une suggestion de ma part ; elle s'appuie sur les principes suivants :

    - currval() renvoie une erreur si nextval() n'a pas �t� appel� au pr�alable dans la m�me session. En l'appelant apr�s un INSERT, je suis s�r que nextval() a �t� appel�.

    - j'utilise essentiellement les SERIAL comme cl�s �trang�res pour des relations ma�tre/d�tails. Apr�s l'INSERT initial dans la table ma�tre suivront vraisemblablement des INSERT dans les tables d�tails avec la valeur renvoy�e par currval(). En pla�ant le tout dans une transaction, je m'assure de la consistence et de la robustesse de ma base.

    Un point important : il ne peut pas y avoir de rollback sur un nextval().
    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

  6. #6
    Membre chevronn�

    D�veloppeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    D�tails du profil
    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Par d�faut
    Merci infiniment GrandFather !!!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 22/04/2011, 17h50
  2. [MySQL] R�cup�rer les valeurs ins�r�es dans la derni�re requ�te
    Par qwertyu dans le forum PHP & Base de donn�es
    R�ponses: 4
    Dernier message: 18/10/2009, 18h28
  3. [MySQL] r�cup�rer une valeur auto incr�ment�e
    Par tonton51 dans le forum PHP & Base de donn�es
    R�ponses: 3
    Dernier message: 29/06/2007, 15h23
  4. auto-r�f�rence : r�cup�rer les valeurs.
    Par storm_2000 dans le forum Requ�tes
    R�ponses: 3
    Dernier message: 10/11/2006, 23h52
  5. [SQL] R�cup�rer simplement la valeur de l'id "auto incr�ment�"
    Par yazerty dans le forum PHP & Base de donn�es
    R�ponses: 4
    Dernier message: 26/10/2006, 12h16

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