0001-Print-prefix-and-logical-WAL-message-content-in-pg_w.v2.patch
text/x-patch
Filename: 0001-Print-prefix-and-logical-WAL-message-content-in-pg_w.v2.patch
Type: text/x-patch
Part: 0
Patch
Format: format-patch
Series: patch v2-0001
Subject: Print prefix and logical WAL message content in pg_waldump
| File | + | − |
|---|---|---|
| src/backend/access/rmgrdesc/logicalmsgdesc.c | 14 | 2 |
| src/include/replication/message.h | 3 | 1 |
From d32859c8368ac25366b156c3247a5b77d9b72ce8 Mon Sep 17 00:00:00 2001
From: Ashutosh Bapat <ashutosh.bapat@2ndquadrant.com>
Date: Tue, 18 Aug 2020 11:05:29 +0530
Subject: [PATCH] Print prefix and logical WAL message content in pg_waldump
Print logical WAL message prefix which is a null terminated ASCII
string. Print the actual message as a space separated hex byte string
since it may contain binary data. This is useful for debugging purposes.
Ashutosh Bapat, reviewed by Alvaro Herrera
---
src/backend/access/rmgrdesc/logicalmsgdesc.c | 16 ++++++++++++++--
src/include/replication/message.h | 4 +++-
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/backend/access/rmgrdesc/logicalmsgdesc.c b/src/backend/access/rmgrdesc/logicalmsgdesc.c
index bff298c928..5da2625a0b 100644
--- a/src/backend/access/rmgrdesc/logicalmsgdesc.c
+++ b/src/backend/access/rmgrdesc/logicalmsgdesc.c
@@ -24,10 +24,22 @@ logicalmsg_desc(StringInfo buf, XLogReaderState *record)
if (info == XLOG_LOGICAL_MESSAGE)
{
xl_logical_message *xlrec = (xl_logical_message *) rec;
+ char *prefix = xlrec->message;
+ char *message = xlrec->message + xlrec->prefix_size;
+ int cnt;
+ char *sep = "";
- appendStringInfo(buf, "%s message size %zu bytes",
+ Assert(prefix[xlrec->prefix_size] != '\0');
+
+ appendStringInfo(buf, "%s, prefix \"%s\"; payload (%zu bytes): ",
xlrec->transactional ? "transactional" : "nontransactional",
- xlrec->message_size);
+ prefix, xlrec->message_size);
+ /* Write actual message as a series of hex bytes. */
+ for (cnt = 0; cnt < xlrec->message_size; cnt++)
+ {
+ appendStringInfo(buf, "%s%02X", sep, (unsigned char)message[cnt]);
+ sep = " ";
+ }
}
}
diff --git a/src/include/replication/message.h b/src/include/replication/message.h
index 937addde48..7b882296ec 100644
--- a/src/include/replication/message.h
+++ b/src/include/replication/message.h
@@ -25,7 +25,9 @@ typedef struct xl_logical_message
Size message_size; /* size of the message */
char message[FLEXIBLE_ARRAY_MEMBER]; /* message including the null
* terminated prefix of length
- * prefix_size */
+ * prefix_size. Please see
+ * logicalmsg_desc(), if you
+ * change this. */
} xl_logical_message;
#define SizeOfLogicalMessage (offsetof(xl_logical_message, message))
--
2.17.1