diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2013-12-04 00:10:47 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2013-12-04 00:10:47 +0200 |
commit | 9e857436ef7dff8fb8a0bf43cfe62650e2be6be9 (patch) | |
tree | e365d1848d19c0ff9180d7a1fa05ba978aae486a /src/backend/commands | |
parent | 22122c83f1331d03e8317afbfcfbb65bef9c82d2 (diff) | |
download | postgresql-9e857436ef7dff8fb8a0bf43cfe62650e2be6be9.tar.gz postgresql-9e857436ef7dff8fb8a0bf43cfe62650e2be6be9.zip |
Don't include unused space in LOG_NEWPAGE records.
This is the same trick we use when taking a full page image of a buffer
passed to XLogInsert.
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/tablecmds.c | 8 | ||||
-rw-r--r-- | src/backend/commands/vacuumlazy.c | 6 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1aa1ad91277..1d9f29a7b7c 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -9130,9 +9130,13 @@ copy_relation_data(SMgrRelation src, SMgrRelation dst, src->smgr_rnode.backend, forkNum)))); - /* XLOG stuff */ + /* + * WAL-log the copied page. Unfortunately we don't know what kind of + * a page this is, so we have to log the full page including any + * unused space. + */ if (use_wal) - log_newpage(&dst->smgr_rnode.node, forkNum, blkno, page); + log_newpage(&dst->smgr_rnode.node, forkNum, blkno, page, false); PageSetChecksumInplace(page, blkno); diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index fe2d9e78fa8..d346772600c 100644 --- a/src/backend/commands/vacuumlazy.c +++ b/src/backend/commands/vacuumlazy.c @@ -699,14 +699,10 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats, * which will cause a PANIC. To prevent that, check whether * the page has been previously WAL-logged, and if not, do that * now. - * - * XXX: It would be nice to use a logging method supporting - * standard buffers here since log_newpage_buffer() will write - * the full block instead of omitting the hole. */ if (RelationNeedsWAL(onerel) && PageGetLSN(page) == InvalidXLogRecPtr) - log_newpage_buffer(buf); + log_newpage_buffer(buf, true); PageSetAllVisible(page); visibilitymap_set(onerel, blkno, buf, InvalidXLogRecPtr, |