From: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> |
---|---|
To: | Peter Geoghegan <pg(at)heroku(dot)com>, Andres Freund <andres(at)anarazel(dot)de> |
Cc: | Jeff Janes <jeff(dot)janes(at)gmail(dot)com>, Stephen Frost <sfrost(at)snowman(dot)net>, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>, Bruce Momjian <bruce(at)momjian(dot)us>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: INSERT ... ON CONFLICT UPDATE/IGNORE 4.0 |
Date: | 2015-05-06 19:51:43 |
Message-ID: | 554A70CF.8090608@iki.fi |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin pgsql-hackers |
On 05/06/2015 10:47 PM, Peter Geoghegan wrote:
> On Wed, May 6, 2015 at 8:20 AM, Andres Freund <andres(at)anarazel(dot)de> wrote:
>> On 2015-05-05 15:00:56 -0700, Peter Geoghegan wrote:
>>> Locking the row is not "nothing", though. If you want to lock the row,
>>> use an UPSERT with a tautologically false WHERE clause (like "WHERE
>>> false").
>>
>> That's not the same. For one it "breaks" RETURNING which is a death
>> knell, for another it's not exactly obvious.
>
> DO NOTHING already doesn't project non-inserted tuples, in a way that
> fits with the way we won't do that when a before trigger returns NULL.
> So I don't know what you mean about RETURNING behavior.
>
> It may not be all that obvious, but then the requirement that you
> mention isn't either. I really strongly feel that DO NOTHING should do
> nothing. For the pgloader use-case, which is what I have in mind with
> that variant, that could literally make the difference between
> dirtying an enormous number of buffers and dirtying only a few. This
> will *frequently* be the case. And it's not as if the idea of an
> INSERT IGNORE is new or in any way novel. As I mentioned, many systems
> have a comparable command.
>
> So, yes, DO NOTHING does very little - and that is its appeal.
> Supporting this behavior does not short change those who actually care
> about the existing tuple sticking around for the duration of their
> transaction - they have a way of doing that. If you want to document
> INSERT IGNORE as being primarily an ETL-orientated thing, that would
> make sense, but let's not hobble that use case.
Yeah, I agree that DO NOTHING should not lock the rows. It might make
sense to have a DO LOCK variant, which locks the rows, although I don't
immediately see what the use case would be.
- Heikki
From | Date | Subject | |
---|---|---|---|
Next Message | David G. Johnston | 2015-05-06 20:03:36 | Re: pg_dump: preserving oids in system tables? |
Previous Message | Peter Geoghegan | 2015-05-06 19:47:43 | Re: INSERT ... ON CONFLICT UPDATE/IGNORE 4.0 |
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Dunstan | 2015-05-06 19:57:03 | Re: Disabling trust/ident authentication configure option |
Previous Message | Peter Geoghegan | 2015-05-06 19:47:43 | Re: INSERT ... ON CONFLICT UPDATE/IGNORE 4.0 |