copy_freeze_all_visible_v1.patch
application/octet-stream
Filename: copy_freeze_all_visible_v1.patch
Type: application/octet-stream
Part: 0
Message:
Re: COPY FREEZE and PD_ALL_VISIBLE
Patch
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/access/heap/heapam.c | 0 | 0 |
| src/backend/access/heap/hio.c | 0 | 0 |
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
new file mode 100644
index bcf9871..c8edd67
*** a/src/backend/access/heap/heapam.c
--- b/src/backend/access/heap/heapam.c
*************** heap_insert(Relation relation, HeapTuple
*** 2189,2195 ****
RelationPutHeapTuple(relation, buffer, heaptup,
(options & HEAP_INSERT_SPECULATIVE) != 0);
! if (PageIsAllVisible(BufferGetPage(buffer)))
{
all_visible_cleared = true;
PageClearAllVisible(BufferGetPage(buffer));
--- 2189,2195 ----
RelationPutHeapTuple(relation, buffer, heaptup,
(options & HEAP_INSERT_SPECULATIVE) != 0);
! if (PageIsAllVisible(BufferGetPage(buffer)) && !(options & HEAP_INSERT_FROZEN))
{
all_visible_cleared = true;
PageClearAllVisible(BufferGetPage(buffer));
*************** heap_multi_insert(Relation relation, Hea
*** 2490,2496 ****
log_heap_new_cid(relation, heaptup);
}
! if (PageIsAllVisible(page))
{
all_visible_cleared = true;
PageClearAllVisible(page);
--- 2490,2496 ----
log_heap_new_cid(relation, heaptup);
}
! if (PageIsAllVisible(BufferGetPage(buffer)) && !(options & HEAP_INSERT_FROZEN))
{
all_visible_cleared = true;
PageClearAllVisible(page);
diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c
new file mode 100644
index 6db73bf..8b3c43e
*** a/src/backend/access/heap/hio.c
--- b/src/backend/access/heap/hio.c
*************** RelationGetBufferForTuple(Relation relat
*** 486,491 ****
--- 486,498 ----
PageInit(page, BufferGetPageSize(buffer), 0);
+ /*
+ * If the tuple intended for the new page will be frozen upon insertion,
+ * mark the page is all visible ab initio.
+ */
+ if (options & HEAP_INSERT_FROZEN)
+ PageSetAllVisible(page);
+
if (len > PageGetHeapFreeSpace(page))
{
/* We should not get here given the test at the top */