mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-06 15:24:56 +08:00
WAL-log the extension of a new empty MV heap which is being populated.
This page with no tuples is used to distinguish an MV containing a zero-row resultset of its backing query from an MV which has not been populated by its backing query. Unless WAL-logged, recovery and hot standby don't work correctly with what should be an empty but scannable materialized view. Fixes bugs reported by Fujii Masao in testing MVs on hot standby.
This commit is contained in:
parent
5141603ebd
commit
c5bf7a2052
@ -14,6 +14,7 @@
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "access/heapam_xlog.h"
|
||||
#include "access/multixact.h"
|
||||
#include "access/relscan.h"
|
||||
#include "access/xact.h"
|
||||
@ -68,10 +69,15 @@ SetRelationIsScannable(Relation relation)
|
||||
Assert(relation->rd_rel->relkind == RELKIND_MATVIEW);
|
||||
Assert(relation->rd_isscannable == false);
|
||||
|
||||
RelationOpenSmgr(relation);
|
||||
page = (Page) palloc(BLCKSZ);
|
||||
PageInit(page, BLCKSZ, 0);
|
||||
|
||||
if (RelationNeedsWAL(relation))
|
||||
log_newpage(&(relation->rd_node), MAIN_FORKNUM, 0, page);
|
||||
|
||||
RelationOpenSmgr(relation);
|
||||
smgrextend(relation->rd_smgr, MAIN_FORKNUM, 0, (char *) page, true);
|
||||
|
||||
pfree(page);
|
||||
|
||||
smgrimmedsync(relation->rd_smgr, MAIN_FORKNUM);
|
||||
|
Loading…
Reference in New Issue
Block a user