Re: INSERT ... ON CONFLICT {UPDATE | IGNORE}

Andres Freund <andres@2ndquadrant.com>

From: Andres Freund <andres@2ndquadrant.com>
To: Heikki Linnakangas <hlinnakangas@vmware.com>
Cc: Peter Geoghegan <pg@heroku.com>, Simon Riggs <simon@2ndquadrant.com>, Pg Hackers <pgsql-hackers@postgresql.org>, Craig Ringer <craig@2ndquadrant.com>
Date: 2014-09-26T12:40:47Z
Lists: pgsql-hackers
On 2014-09-26 15:32:35 +0300, Heikki Linnakangas wrote:
> On 09/26/2014 03:30 PM, Andres Freund wrote:
> >On 2014-09-26 15:24:21 +0300, Heikki Linnakangas wrote:
> >>I don't know what you mean by "in the head of AM", but IMO it would be far
> >>better if we can implement this outside the index AMs. Then it will work
> >>with any index AM.
> >
> >Also, it's the only chance to make this ever work across partitions.
> 
> How so? Assuming there's no overlap in the partitions, you could lock the
> page in the index of the partition you're inserting to, just like you would
> insert the promise tuple to the right partition.

Well, the 'no overlap' case is boring. At least if you mean that each
partition has disctinct value ranges in the index?

And the reason that the buffer locking approach in the overlapping case
is that you'd need to hold a large number of pages locked at the same
time. Right?

But primarily I mean that bulk of the uniqueness checking logic has to
live outside the individual AMs. It doesn't sound enticing to reach from
inside one AM into another partitions index to do stuff.

Greetings,

Andres Freund

-- 
 Andres Freund	                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


Commits

  1. Change the way we mark tuples as frozen.

  2. Add documentation for data-modifying statements in WITH clauses.