From 9b7b3effad8c860a003dc60eb1ea53aa15a26ad9 Mon Sep 17 00:00:00 2001 From: Euler Taveira Date: Wed, 11 Nov 2020 11:25:48 -0300 Subject: [PATCH 2/2] Print checkpoint timestamp for xlog_desc Checkpoint timestamp might be useful for debug purposes. Let's expose it. Since this function is used by frontend (pg_waldump) and backend (WAL_DEBUG), use different code paths to print the timestamp. --- src/backend/access/rmgrdesc/xlogdesc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c index 3200f777f5..76b4388701 100644 --- a/src/backend/access/rmgrdesc/xlogdesc.c +++ b/src/backend/access/rmgrdesc/xlogdesc.c @@ -14,6 +14,10 @@ */ #include "postgres.h" +#ifdef FRONTEND +#include +#endif + #include "access/transam.h" #include "access/xlog.h" #include "access/xlog_internal.h" @@ -43,13 +47,23 @@ xlog_desc(StringInfo buf, XLogReaderState *record) info == XLOG_CHECKPOINT_ONLINE) { CheckPoint *checkpoint = (CheckPoint *) rec; + time_t time_tmp; + char checkpointstr[128]; - appendStringInfo(buf, "redo %X/%X; " + time_tmp = (time_t) checkpoint->time; +#ifdef FRONTEND + strftime(checkpointstr, sizeof(checkpointstr), "%c", localtime(&time_tmp)); +#else + pg_strftime(checkpointstr, sizeof(checkpointstr), "%c", pg_localtime(&time_tmp, log_timezone)); +#endif + + appendStringInfo(buf, "redo %X/%X; timestamp %s; " "tli %u; prev tli %u; fpw %s; xid %u:%u; oid %u; multi %u; offset %u; " "oldest xid %u in DB %u; oldest multi %u in DB %u; " "oldest/newest commit timestamp xid: %u/%u; " "oldest running xid %u; %s", (uint32) (checkpoint->redo >> 32), (uint32) checkpoint->redo, + checkpointstr, checkpoint->ThisTimeLineID, checkpoint->PrevTimeLineID, checkpoint->fullPageWrites ? "true" : "false", -- 2.20.1