aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Geoghegan <pg@bowt.ie>2019-09-12 15:45:08 -0700
committerPeter Geoghegan <pg@bowt.ie>2019-09-12 15:45:08 -0700
commit3b6b54f178d7539354064727cca9b4ff2eca0fce (patch)
tree80a4c456edf4ed39a40682539e027342afea0d84
parent7f1f72c44400e6fef3436b05f1ad0f6bacd03d96 (diff)
downloadpostgresql-3b6b54f178d7539354064727cca9b4ff2eca0fce.tar.gz
postgresql-3b6b54f178d7539354064727cca9b4ff2eca0fce.zip
Fix nbtree page split rmgr desc routine.
Include newitemoff in rmgr desc output for nbtree page split records. In passing, correct an obsolete comment that claimed that newitemoff is only logged for _L variant nbtree page split WAL records. Both issues were oversights in commit 2c03216d831, which revamped the WAL format. Author: Peter Geoghegan Backpatch: 9.5-, where the WAL format was revamped.
-rw-r--r--src/backend/access/rmgrdesc/nbtdesc.c4
-rw-r--r--src/include/access/nbtxlog.h15
2 files changed, 9 insertions, 10 deletions
diff --git a/src/backend/access/rmgrdesc/nbtdesc.c b/src/backend/access/rmgrdesc/nbtdesc.c
index a14eb792ecd..4ee6d04a68e 100644
--- a/src/backend/access/rmgrdesc/nbtdesc.c
+++ b/src/backend/access/rmgrdesc/nbtdesc.c
@@ -38,8 +38,8 @@ btree_desc(StringInfo buf, XLogReaderState *record)
{
xl_btree_split *xlrec = (xl_btree_split *) rec;
- appendStringInfo(buf, "level %u, firstright %d",
- xlrec->level, xlrec->firstright);
+ appendStringInfo(buf, "level %u, firstright %d, newitemoff %d",
+ xlrec->level, xlrec->firstright, xlrec->newitemoff);
break;
}
case XLOG_BTREE_VACUUM:
diff --git a/src/include/access/nbtxlog.h b/src/include/access/nbtxlog.h
index afa614da252..91b9ee00cfc 100644
--- a/src/include/access/nbtxlog.h
+++ b/src/include/access/nbtxlog.h
@@ -82,13 +82,12 @@ typedef struct xl_btree_insert
*
* Note: XLOG_BTREE_SPLIT_L and XLOG_BTREE_SPLIT_R share this data record.
* There are two variants to indicate whether the inserted tuple went into the
- * left or right split page (and thus, whether newitemoff and the new item are
- * stored or not). We always log the left page high key because suffix
- * truncation can generate a new leaf high key using user-defined code. This
- * is also necessary on internal pages, since the first right item that the
- * left page's high key was based on will have been truncated to zero
- * attributes in the right page (the original is unavailable from the right
- * page).
+ * left or right split page (and thus, whether the new item is stored or not).
+ * We always log the left page high key because suffix truncation can generate
+ * a new leaf high key using user-defined code. This is also necessary on
+ * internal pages, since the first right item that the left page's high key
+ * was based on will have been truncated to zero attributes in the right page
+ * (the original is unavailable from the right page).
*
* Backup Blk 0: original page / new left page
*
@@ -112,7 +111,7 @@ typedef struct xl_btree_split
{
uint32 level; /* tree level of page being split */
OffsetNumber firstright; /* first item moved to right page */
- OffsetNumber newitemoff; /* new item's offset (if placed on left page) */
+ OffsetNumber newitemoff; /* new item's offset (useful for _L variant) */
} xl_btree_split;
#define SizeOfBtreeSplit (offsetof(xl_btree_split, newitemoff) + sizeof(OffsetNumber))