Re: INSERT ON CONFLICT and RETURNING
Andreas Karlsson <andreas@proxel.se>
From: Andreas Karlsson <andreas@proxel.se>
To: Konstantin Knizhnik <k.knizhnik@postgrespro.ru>,
Marko Tiikkaja <marko@joh.to>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2020-09-03T19:59:55Z
Lists: pgsql-hackers
On 9/3/20 6:52 PM, Konstantin Knizhnik wrote: > But frankly speaking I still didn't find answer for my question in this > thread: what are the dangerous scenarios with ON CONFLICT DO > NOTHING/SELECT. > Yes, record is not exclusively locked. But I just want to obtain value > of some column which is not a source of conflict. I do not understand > what can be wrong if some > other transaction changed this column. > > And I certainly can't agree with Peter's statement: > > Whereas here, with ON CONFLICT DO SELECT, > > I see a somewhat greater risk, and a much, much smaller benefit. A > > benefit that might actually be indistinguishable from zero. > > From my point of view it is quite common use case when we need to > convert some long key to small autogenerated record identifier. > Without UPSERT we have to perform two queries instead of just one . And > even with current implementation of INSERT ON CONFLICT... > we have to either perform extra lookup, either produce new (useless) > tuple version. I have no idea about the potential risks here since I am not very familiar with the ON CONFLICT code, but I will chime in and agree that this is indeed a common use case. Selecting and taking a SHARE lock would also be a nice feature. Andreas