diff options
author | Andres Freund <andres@anarazel.de> | 2019-04-01 14:41:42 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2019-04-01 14:41:42 -0700 |
commit | d45e40158623baacd3f36f92a670d435cc1e845f (patch) | |
tree | a40ff43e146006118c44fed313454f0768eb44f7 /src/backend/commands/matview.c | |
parent | 26a76cb64072df6fa5585c2c15df39970ccdce01 (diff) | |
download | postgresql-d45e40158623baacd3f36f92a670d435cc1e845f.tar.gz postgresql-d45e40158623baacd3f36f92a670d435cc1e845f.zip |
tableam: Add table_finish_bulk_insert().
This replaces the previous calls of heap_sync() in places using
bulk-insert. By passing in the flags used for bulk-insert the AM can
decide (first at insert time and then during the finish call) which of
the optimizations apply to it, and what operations are necessary to
finish a bulk insert operation.
Also change HEAP_INSERT_* flags to TABLE_INSERT, and rename hi_options
to ti_options.
These changes are made even in copy.c, which hasn't yet been converted
to tableam. There's no harm in doing so.
Author: Andres Freund
Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
Diffstat (limited to 'src/backend/commands/matview.c')
-rw-r--r-- | src/backend/commands/matview.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 5b2cbc7c89c..2aac63296bf 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -18,6 +18,7 @@ #include "access/heapam.h" #include "access/htup_details.h" #include "access/multixact.h" +#include "access/tableam.h" #include "access/xact.h" #include "access/xlog.h" #include "catalog/catalog.h" @@ -53,7 +54,7 @@ typedef struct /* These fields are filled by transientrel_startup: */ Relation transientrel; /* relation to write to */ CommandId output_cid; /* cmin to insert in output tuples */ - int hi_options; /* heap_insert performance options */ + int ti_options; /* table_insert performance options */ BulkInsertState bistate; /* bulk insert state */ } DR_transientrel; @@ -257,7 +258,7 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString, * as open scans. * * NB: We count on this to protect us against problems with refreshing the - * data using HEAP_INSERT_FROZEN. + * data using TABLE_INSERT_FROZEN. */ CheckTableNotInUse(matviewRel, "REFRESH MATERIALIZED VIEW"); @@ -461,9 +462,9 @@ transientrel_startup(DestReceiver *self, int operation, TupleDesc typeinfo) * 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 | HEAP_INSERT_FROZEN; + myState->ti_options = TABLE_INSERT_SKIP_FSM | TABLE_INSERT_FROZEN; if (!XLogIsNeeded()) - myState->hi_options |= HEAP_INSERT_SKIP_WAL; + myState->ti_options |= TABLE_INSERT_SKIP_WAL; myState->bistate = GetBulkInsertState(); /* Not using WAL requires smgr_targblock be initially invalid */ @@ -490,7 +491,7 @@ transientrel_receive(TupleTableSlot *slot, DestReceiver *self) table_insert(myState->transientrel, slot, myState->output_cid, - myState->hi_options, + myState->ti_options, myState->bistate); /* We know this is a newly created relation, so there are no indexes */ @@ -508,9 +509,7 @@ transientrel_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->transientrel); + table_finish_bulk_insert(myState->transientrel, myState->ti_options); /* close transientrel, but keep lock until commit */ table_close(myState->transientrel, NoLock); |