From 72351f7dbf0353ec1fcd8bb14a1563806eb62218 Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy Date: Tue, 8 Dec 2020 12:20:17 +0530 Subject: [PATCH v1] ATRewriteTable With New Single Insert Table AM This patch adds new single insert table access method to ALTER TABLE rewrite table code. --- src/backend/commands/tablecmds.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 46f1637e77..80f013036e 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -5182,10 +5182,8 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) int i; ListCell *l; EState *estate; - CommandId mycid; - BulkInsertState bistate; - int ti_options; ExprState *partqualstate = NULL; + TableInsertState *istate = NULL; /* * Open the relation(s). We have surely already locked the existing @@ -5206,16 +5204,13 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) */ if (newrel) { - mycid = GetCurrentCommandId(true); - bistate = GetBulkInsertState(); - ti_options = TABLE_INSERT_SKIP_FSM; - } - else - { - /* keep compiler quiet about using these uninitialized */ - mycid = 0; - bistate = NULL; - ti_options = 0; + istate = table_insert_begin(newrel, + GetCurrentCommandId(true), + TABLE_INSERT_SKIP_FSM, + true, + false, + -1, + -1); } /* @@ -5510,8 +5505,7 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) /* Write the tuple out to the new relation */ if (newrel) - table_tuple_insert(newrel, insertslot, mycid, - ti_options, bistate); + table_insert_v2(istate, insertslot); ResetExprContext(econtext); @@ -5532,7 +5526,9 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) table_close(oldrel, NoLock); if (newrel) { - FreeBulkInsertState(bistate); + int ti_options = istate->options; + + table_insert_end(istate); table_finish_bulk_insert(newrel, ti_options); -- 2.25.1