Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1353 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Recupérer la clé créée lors d'un INSERT dans postgres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recupérer la clé créée lors d'un INSERT dans postgres

n°1771768
rafafaf
Un couple nu copule.
Posté le 10-08-2008 à 23:44:39  profilanswer
 

Salut à tous, je m'en viens solliciter votre aide !
 
Voilà, une tite question, j'espère assez simple, mais qui me pose quelques soucis, je vous expose le sujet :  
Une base de données contient (entre autres) 2 tables Membre et Objet. L'idée de base, c'est qu'un membre possède des objets (subtil, n'est-ce pas  :D ) La clé de chacune de ces 2 tables est un identifiant, dans le cas de la table Objet c'est un type "serial" (chez Postgres, donc en fait c'est un entier à incrémentation automatique). Les cardinalités sont 0,n de chaque côté, donc je crée une table intermédiaire "possède" dont le clé est un ensemble id_membre + id-objet .
 
Via une interface web que je suis en train de créer (c'est dans le cadre d'un stage de fin d'année, je précise, sait-on jamais....), je veux permettre à un membre d'ajouter un objet, via un simple formulaire dans lequel il remplit les caractéristiques de l'objet. Une fois les infos rentrées, un peu de PHP, pg_connect tout ça, requete insert dans la table Objet. Donc, dans cette requete insert, je ne spécifie pas l'identifiant (puisque incrémenté), du coup ça donne un truc dans ce genre là :
INSERT INTO objet(Nom,Description, URL) VALUES ('truc', 'un super truc', 'www.truc.com');  
(je me marre un max avec mes requetes en ce moment, faut pas m'en vouloir :D  )
Le souci, c'est qu'en suite je voudrai ajouter le couple id_membre_connecté + id_objet_qu'on_vient-dinserer  dans la table "possède", et là je bloque... L'id du membre, pas de souci, elle est stockée dans un cookie, mais recupérer l'id de l'objet qu'on vient d'insérer... Erf  :/
 
Bref, je cale pas mal là, et j'ai du mal à faire des recherches efficaces sur le sujet (dur de compacter ça dans quelques mots...). Du coup, si quelqu'un pouvait éclairer ma lanterne, que ce soit via une solution toute prête ou un lien, ça m'aiderait vraiment !  (bon, je me dis que peut-être, via des triggers et/ou des transactions... Mais voilà, mon raisonnement est bloqué là !)
 
Merci !  :jap:


---------------
J'suis bien content que vous ayez des enceintes. C'est un objet tout simple, et pourtant !
mood
Publicité
Posté le 10-08-2008 à 23:44:39  profilanswer
 

n°1772259
MagicBuzz
Posté le 12-08-2008 à 03:15:45  profilanswer
 

"last inserted id serial posgres" dans google, quelques pages de lecture rapide et... http://www.postgresql.org/docs/7.3 [...] uence.html

n°1772416
rafafaf
Un couple nu copule.
Posté le 12-08-2008 à 12:17:58  profilanswer
 

Trop cool, c'est exactement ce qu'il me fallait, merci !
Pour ceux qui se posent la même question que moi, il suffit d'utiliser la fonction currval() avec pour argument le nom de la séquence d'incrémentation  (dans mon cas currval(objet_id_seq) ) lors de l'insert suivant. Elle renvoie l'identifiant de la derniere insertion effectuée dans cette session. Donc ça gère automatiquement les accès concurents !  
Ca donnera donc
INSERT INTO possede VALUES (id_membre, currval(objet_id_seq));
 
Encore merci MagicBuzz !


---------------
J'suis bien content que vous ayez des enceintes. C'est un objet tout simple, et pourtant !
n°1772435
Taz
bisounours-codeur
Posté le 12-08-2008 à 12:51:08  profilanswer
 

mouais, moi ça me convainc pas trop, si t'as des triggers, toussa. Mieux vaut chopper un id d'abord, ensuite faire ses insert, etc.

n°1772438
0x90
Posté le 12-08-2008 à 12:54:57  profilanswer
 

T'as la clause RETURNING qui fait exactement ce que tu veut  :  

Citation :

The optional RETURNING clause causes INSERT to compute and return value(s) based on each row actually inserted. This is primarily useful for obtaining values that were supplied by defaults, such as a serial sequence number.


http://www.postgresql.org/docs/cur [...] nsert.html


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1772520
rafafaf
Un couple nu copule.
Posté le 12-08-2008 à 14:51:31  profilanswer
 

Hum, c'est pas faux pour les triggers, je me demande quelle insertion il considère en dernier dans ce cas...
Je me pencherai sur la clause returning quand j'aurai le temps ! Merci pour les réponses en tout cas :jap:


---------------
J'suis bien content que vous ayez des enceintes. C'est un objet tout simple, et pourtant !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Recupérer la clé créée lors d'un INSERT dans postgres

 

Sujets relatifs
[MySQL]Aide pour recuperer des bbcodesrecuperer le contenu d'un fichier
ORACLE - recupérer une ressourceRécupérer checkbox par mail php
Recuperer une liste avec php mail[Eclipse] Récupérer projet d'un svn
[C] Récupérer des données sur InternetRécupérer texte pour envoi par mail
[PHP/HTML] récupérer valeur PHP depuis javascriptrecupérer donnes
Plus de sujets relatifs à : Recupérer la clé créée lors d'un INSERT dans postgres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR