Re: Transaction en erreur sur CLOSE ou INSERT

From: Marc Cousin <mcousin(at)sigma(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Cc: Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr>, philippe(dot)beaudoin(at)bull(dot)net
Subject: Re: Transaction en erreur sur CLOSE ou INSERT
Date: 2009-01-12 10:40:16
Message-ID: 200901121140.16761.mcousin@sigma.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Le Monday 12 January 2009 11:26:22 Stephane Bortzmeyer, vous avez écrit :
> On Sat, Jan 10, 2009 at 10:41:57AM +0100,
> philippe(dot)beaudoin(at)bull(dot)net <philippe(dot)beaudoin(at)bull(dot)net> wrote
>
> a message of 68 lines which said:
> > 2) Détection de doublon sur INSERT
>
> N'est-ce pas ce qu'on appelle couramment un UPSERT
> <http://en.wikipedia.org/wiki/Upsert> ? Si oui, outre la solution du
> UPDATE-if-rowcount-0-INSERT, il y a celle du
> SELECT-if-not-found-INSERT-else-UPDATE.

Si mais la dernière version (SELECT,INSERT,UPDATE) oblige à faire au moins 2
ordres à chaque fois, ce qui la rendra probablement moins performante (à
cause du dialogue client-serveur). Evidemment, si le moteur supportait des
merges, cela serait la solution au problème, mais en attendant, le plus
efficace est de faire l'opération qui réussira le plus fréquemment d'abord
(ça dépend de l'appli), intercepter l'erreur pour l'autre cas et le traiter
ensuite.
Les 2 versions (insert puis update ou update puis insert) ont des coûts
propres :
- le besoin de créer (implicitement en pl ou explicitement en sql) un
savepoint pour la première
- le besoin d'aller rechercher un enregistrement dans la table pour l'update
(via un index) dans le second.

Le mieux dans ce genre de cas, c'est de connaître l'application et de savoir
quel est l'ordre qui va réussir dans 95% des cas ...

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Stephane Bortzmeyer 2009-01-12 10:45:35 Re: Transaction en erreur sur CLOSE ou INSERT
Previous Message Stephane Bortzmeyer 2009-01-12 10:26:22 Re: Transaction en erreur sur CLOSE ou INSERT