PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 13/02/2012 11:52:14

palex
Membre

Update Et insert

bonjour à tous

j'ai besoin dans mon application d'executer une requete d'update du style :

update synchronizedelta set datemodification = ?, doSync  = ? where groupeid = ? and num = ?;

sauf que la ligne doit exister avant de faire l'update, donc dans le meilleur des mondes, je devrais faire un truc du style :

select ....
if(exist)
  update
else
  insert

du coup j'ai systématiquement 2 requetes alors que le select, finalement va me servir uniquement 1 fois par client car une fois la ligne inséré "exist" sera toujours vrai.

Donc la solution que j'aimerais mettre en place serai de faire un truc du style (syntax non fonctionnel, il s'agit juste d'une proposition pour comprendre ce que je voudrais faire)

case when (coalesce(select id from synchronizedelta  where groupeid = ? and num = ?;, 0) > 0) then update ... ELSE insert ... END;

du coup le select est toujours joué aussi mais avec cette méthode je n'ai qu un appel à la base au lieu de 2

existe t  il une syntax similaire que je pourrais adopter?

merci beaucoup.

Dernière modification par palex (13/02/2012 11:53:22)

Hors ligne

#2 13/02/2012 12:12:09

Marc Cousin
Membre

Re : Update Et insert

Il n'y a pas de syntaxe MERGE dans postgres pour le moment, donc il faut passer par plusieurs requêtes.

Vous pouvez toutefois vous débarrasser de l'une d'entre elle: le select ne sert à rien…

Faites un update, et regardez si il y a un enregistrement modifié. Sinon, faites un insert.

Hors ligne

#3 13/02/2012 12:33:06

palex
Membre

Re : Update Et insert

ok ca marche, je vais faire ca, merci pour le conseil.

Hors ligne

#4 13/02/2012 13:02:09

Marc Cousin
Membre

Re : Update Et insert

Et sinon, faites en un bout de PL, si vous voulez, ça évite un aller/retour entre le client et le serveur.

Hors ligne

Pied de page des forums