Re: Re: bulk_multi_insert infinite loops with large rows and small fill factors

Heikki Linnakangas <hlinnakangas@vmware.com>

From: Heikki Linnakangas <hlinnakangas@vmware.com>
To: David Gould <daveg@sonic.net>
Cc: Andres Freund <andres@2ndquadrant.com>, pgsql-hackers@postgresql.org, Anand Ranganathan <arangana@adobe.com>, Alex Eulenberg <aeulenbe@adobe.com>, Ashokraj M <ashokraj@adobe.com>, Hari <hari@adobe.com>, Elein Mustain <mustain@adobe.com>
Date: 2012-12-12T12:27:54Z
Lists: pgsql-hackers
On 12.12.2012 14:24, David Gould wrote:
> I don't know if this is the same thing. At least in the comments I was
> reading trying to figure this out there was some concern that someone
> else could change the space on the page. Does RelationGetBufferForTuple()
> guarantee against this too?

Yeah, RelationGetBufferForTuple grabs a lock on the page before 
returning it. For comparison, plain heap_insert does simply this:

> 	buffer = RelationGetBufferForTuple(relation, heaptup->t_len,
> 									   InvalidBuffer, options, bistate,
> 									   &vmbuffer, NULL);
>
> 	/* NO EREPORT(ERROR) from here till changes are logged */
> 	START_CRIT_SECTION();
>
> 	RelationPutHeapTuple(relation, buffer, heaptup);

- Heikki