diff options
author | Noah Misch <noah@leadboat.com> | 2020-03-22 09:24:09 -0700 |
---|---|---|
committer | Noah Misch <noah@leadboat.com> | 2020-03-22 09:24:15 -0700 |
commit | b31e96ba420f049625435591ba7ae3ded89a781d (patch) | |
tree | bf07eafdd96ba96bbcdb42b21e3e9047e6214317 /src/backend/commands/createas.c | |
parent | 9db4b9da2801ed94c8f209c807e654c139dc1d7e (diff) | |
download | postgresql-b31e96ba420f049625435591ba7ae3ded89a781d.tar.gz postgresql-b31e96ba420f049625435591ba7ae3ded89a781d.zip |
Revert "Skip WAL for new relfilenodes, under wal_level=minimal."
This reverts commit cb2fd7eac285b1b0a24eeb2b8ed4456b66c5a09f. Per
numerous buildfarm members, it was incompatible with parallel query, and
a test case assumed LP64. Back-patch to 9.5 (all supported versions).
Discussion: https://postgr.es/m/20200321224920.GB1763544@rfd.leadboat.com
Diffstat (limited to 'src/backend/commands/createas.c')
-rw-r--r-- | src/backend/commands/createas.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index 588a5acc108..e75b4fd65fe 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -561,13 +561,16 @@ intorel_startup(DestReceiver *self, int operation, TupleDesc typeinfo) myState->rel = intoRelationDesc; myState->reladdr = intoRelationAddr; myState->output_cid = GetCurrentCommandId(true); - myState->hi_options = HEAP_INSERT_SKIP_FSM; - myState->bistate = GetBulkInsertState(); /* - * Valid smgr_targblock implies something already wrote to the relation. - * This may be harmless, but this function hasn't planned for it. + * We can skip WAL-logging the insertions, unless PITR or streaming + * replication is in use. We can skip the FSM in any case. */ + myState->hi_options = HEAP_INSERT_SKIP_FSM | + (XLogIsNeeded() ? 0 : HEAP_INSERT_SKIP_WAL); + myState->bistate = GetBulkInsertState(); + + /* Not using WAL requires smgr_targblock be initially invalid */ Assert(RelationGetTargetBlock(intoRelationDesc) == InvalidBlockNumber); } @@ -611,6 +614,10 @@ intorel_shutdown(DestReceiver *self) FreeBulkInsertState(myState->bistate); + /* If we skipped using WAL, must heap_sync before commit */ + if (myState->hi_options & HEAP_INSERT_SKIP_WAL) + heap_sync(myState->rel); + /* close rel, but keep lock until commit */ heap_close(myState->rel, NoLock); myState->rel = NULL; |