On Thu, Jul 7, 2016 at 3:36 AM, Andres Freund <and...@anarazel.de> wrote: > On 2016-07-05 23:37:59 +0900, Masahiko Sawada wrote: > >> @@ -8694,6 +8761,23 @@ heap_xlog_lock(XLogReaderState *record) >> } >> HeapTupleHeaderSetXmax(htup, xlrec->locking_xid); >> HeapTupleHeaderSetCmax(htup, FirstCommandId, false); >> + >> + /* The visibility map need to be cleared */ >> + if ((xlrec->infobits_set & XLHL_ALL_VISIBLE_CLEARED) != 0) >> + { >> + RelFileNode rnode; >> + Buffer vmbuffer = InvalidBuffer; >> + BlockNumber blkno; >> + Relation reln; >> + >> + XLogRecGetBlockTag(record, 0, &rnode, NULL, &blkno); >> + reln = CreateFakeRelcacheEntry(rnode); >> + >> + visibilitymap_pin(reln, blkno, &vmbuffer); >> + visibilitymap_clear(reln, blkno, vmbuffer); >> + PageClearAllVisible(page); >> + } >> + > > >> PageSetLSN(page, lsn); >> MarkBufferDirty(buffer); >> } >> diff --git a/src/include/access/heapam_xlog.h >> b/src/include/access/heapam_xlog.h >> index a822d0b..41b3c54 100644 >> --- a/src/include/access/heapam_xlog.h >> +++ b/src/include/access/heapam_xlog.h >> @@ -242,6 +242,7 @@ typedef struct xl_heap_cleanup_info >> #define XLHL_XMAX_EXCL_LOCK 0x04 >> #define XLHL_XMAX_KEYSHR_LOCK 0x08 >> #define XLHL_KEYS_UPDATED 0x10 >> +#define XLHL_ALL_VISIBLE_CLEARED 0x20 > > Hm. We can't easily do that in the back-patched version; because a > standby won't know to check for the flag . That's kinda ok, since we > don't yet need to clear all-visible yet at that point of > heap_update. But that better means we don't do so on the master either. >
To clarify, do you mean to say that lets have XLHL_ALL_FROZEN_CLEARED and do that just for master. For back-branches no need to clear visibility any flags? -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers