diff --git a/contrib/pax_storage/src/cpp/storage/wal/paxc_desc.c b/contrib/pax_storage/src/cpp/storage/wal/paxc_desc.c index c1457fc4787..8900f0bc8a7 100644 --- a/contrib/pax_storage/src/cpp/storage/wal/paxc_desc.c +++ b/contrib/pax_storage/src/cpp/storage/wal/paxc_desc.c @@ -30,6 +30,7 @@ #else #include "storage/wal/paxc_desc.h" #endif +#include "common/relpath.h" void pax_rmgr_desc(StringInfo buf, XLogReaderState *record) { char *rec = XLogRecGetData(record); @@ -38,14 +39,24 @@ void pax_rmgr_desc(StringInfo buf, XLogReaderState *record) { switch (info) { case XLOG_PAX_INSERT: { char filename[MAX_PATH_FILE_NAME_LEN]; + char *relpathPart; + size_t relpathPartSz; char *rec = XLogRecGetData(record); xl_pax_insert *xlrec = (xl_pax_insert *)rec; Assert(xlrec->target.file_name_len < MAX_PATH_FILE_NAME_LEN); - memcpy(filename, rec + SizeOfPAXInsert, xlrec->target.file_name_len); - filename[xlrec->target.file_name_len] = '\0'; + relpathPart = relpathbackend(xlrec->target.node, InvalidBackendId, MAIN_FORKNUM); + relpathPartSz = strlen(relpathPart); + + memcpy(filename, relpathPart, relpathPartSz); + +#define PAX_DIR_SUFFIX "_pax/" + + memcpy(filename + relpathPartSz, PAX_DIR_SUFFIX, strlen(PAX_DIR_SUFFIX)); + memcpy(filename + relpathPartSz + strlen(PAX_DIR_SUFFIX), rec + SizeOfPAXInsert, xlrec->target.file_name_len); + filename[relpathPartSz + xlrec->target.file_name_len + strlen(PAX_DIR_SUFFIX)] = '\0'; int32 bufferLen = XLogRecGetDataLen(record) - SizeOfPAXInsert - xlrec->target.file_name_len;