Pass more than the first XLogRecData entry to rm_desc, with WAL_DEBUG.
If you compile with WAL_DEBUG and enable it with wal_debug=on, we used to only pass the first XLogRecData entry to the rm_desc routine. I think the original assumprion was that the first XLogRecData entry contains all the necessary information for the rm_desc routine, but that's a pretty shaky assumption. At least standby_redo didn't get the memo. To fix, piece together all the data in a temporary buffer, and pass that to the rm_desc routine. It's been like this forever, but the patch didn't apply cleanly to back-branches. Probably wouldn't be hard to fix the conflicts, but it's not worth the trouble.
This commit is contained in:
parent
b69c4e65be
commit
c2a6724823
@ -1262,8 +1262,23 @@ begin:;
|
|||||||
xlog_outrec(&buf, rechdr);
|
xlog_outrec(&buf, rechdr);
|
||||||
if (rdata->data != NULL)
|
if (rdata->data != NULL)
|
||||||
{
|
{
|
||||||
|
StringInfoData recordbuf;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have to piece together the WAL record data from the
|
||||||
|
* XLogRecData entries, so that we can pass it to the rm_desc
|
||||||
|
* function as one contiguous chunk. (but we can leave out any
|
||||||
|
* extra entries we created for backup blocks)
|
||||||
|
*/
|
||||||
|
rdt_lastnormal->next = NULL;
|
||||||
|
|
||||||
|
initStringInfo(&recordbuf);
|
||||||
|
for (;rdata != NULL; rdata = rdata->next)
|
||||||
|
appendBinaryStringInfo(&recordbuf, rdata->data, rdata->len);
|
||||||
|
|
||||||
appendStringInfoString(&buf, " - ");
|
appendStringInfoString(&buf, " - ");
|
||||||
RmgrTable[rechdr->xl_rmid].rm_desc(&buf, rechdr->xl_info, rdata->data);
|
RmgrTable[rechdr->xl_rmid].rm_desc(&buf, rechdr->xl_info, recordbuf.data);
|
||||||
|
pfree(recordbuf.data);
|
||||||
}
|
}
|
||||||
elog(LOG, "%s", buf.data);
|
elog(LOG, "%s", buf.data);
|
||||||
pfree(buf.data);
|
pfree(buf.data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user