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