summaryrefslogtreecommitdiff
path: root/src/backend/access/rmgrdesc/logicalmsgdesc.c
diff options
context:
space:
mode:
authorAlvaro Herrera2020-09-10 22:37:02 +0000
committerAlvaro Herrera2020-09-10 22:37:02 +0000
commit9f1cf97bb5387a6243c8a6c9725616ef7447962e (patch)
tree25c9135b921060ada50579f9321ce4d492694efb /src/backend/access/rmgrdesc/logicalmsgdesc.c
parent58c6feccfae1321ea4ff16c535c6f3fb90a07d69 (diff)
Print WAL logical message contents in pg_waldump
This helps debuggability when looking at WAL streams containing logical messages. Author: Ashutosh Bapat <[email protected]> Reviewed-by: Álvaro Herrera <[email protected]> Discussion: https://postgr.es/m/CAExHW5sWx49rKmXbg5H1Xc1t+nRv9PaYKQmgw82HPt6vWDVmDg@mail.gmail.com
Diffstat (limited to 'src/backend/access/rmgrdesc/logicalmsgdesc.c')
-rw-r--r--src/backend/access/rmgrdesc/logicalmsgdesc.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/backend/access/rmgrdesc/logicalmsgdesc.c b/src/backend/access/rmgrdesc/logicalmsgdesc.c
index bff298c9287..83ab93a24be 100644
--- a/src/backend/access/rmgrdesc/logicalmsgdesc.c
+++ b/src/backend/access/rmgrdesc/logicalmsgdesc.c
@@ -24,10 +24,21 @@ 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;
+ char *sep = "";
- appendStringInfo(buf, "%s message size %zu bytes",
- xlrec->transactional ? "transactional" : "nontransactional",
- xlrec->message_size);
+ Assert(prefix[xlrec->prefix_size] != '\0');
+
+ appendStringInfo(buf, "%s, prefix \"%s\"; payload (%zu bytes): ",
+ xlrec->transactional ? "transactional" : "non-transactional",
+ prefix, xlrec->message_size);
+ /* Write message payload as a series of hex bytes */
+ for (int cnt = 0; cnt < xlrec->message_size; cnt++)
+ {
+ appendStringInfo(buf, "%s%02X", sep, (unsigned char) message[cnt]);
+ sep = " ";
+ }
}
}