debug-pd_all_visible-1.patch
text/x-diff
Filename: debug-pd_all_visible-1.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/commands/vacuumlazy.c | 16 | 2 |
diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c
index 67e0be9..0e88aa5 100644
--- a/src/backend/commands/vacuumlazy.c
+++ b/src/backend/commands/vacuumlazy.c
@@ -48,6 +48,7 @@
#include "pgstat.h"
#include "postmaster/autovacuum.h"
#include "storage/bufmgr.h"
+#include "storage/fd.h"
#include "storage/freespace.h"
#include "storage/lmgr.h"
#include "utils/inval.h"
@@ -668,13 +669,26 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats,
/* Update the all-visible flag on the page */
if (!PageIsAllVisible(page) && all_visible)
{
+ elog(WARNING, "debugging: setting PD_ALL_VISIBLE in relation \"%s\" on page %u (OldestXmin %u)", relname, blkno, OldestXmin);
PageSetAllVisible(page);
SetBufferCommitInfoNeedsSave(buf);
}
else if (PageIsAllVisible(page) && !all_visible)
{
- elog(WARNING, "PD_ALL_VISIBLE flag was incorrectly set in relation \"%s\" page %u",
- relname, blkno);
+ elog(WARNING, "PD_ALL_VISIBLE flag was incorrectly set in relation \"%s\" page %u (OldestXmin %u)",
+ relname, blkno, OldestXmin);
+ {
+ char fname[MAXPGPATH];
+ FILE *fp;
+
+ /* dump the raw page to a file */
+ snprintf(fname, sizeof(fname), "/tmp/pageimage_%s_%d",
+ relname, blkno);
+ fp = AllocateFile(fname, "wb");
+ fwrite(page, 1, BLCKSZ, fp);
+ FreeFile(fp);
+
+ }
PageClearAllVisible(page);
SetBufferCommitInfoNeedsSave(buf);