On Tue, Sep 27, 2022 at 6:03 PM Etsuro Fujita <etsuro.fuj...@gmail.com> wrote: > I will review the patch a bit more, but I feel that it is > in good shape.
One thing I noticed is this bit added to CopyMultiInsertBufferFlush() to run triggers on the foreign table. + /* Run AFTER ROW INSERT triggers */ + if (resultRelInfo->ri_TrigDesc != NULL && + (resultRelInfo->ri_TrigDesc->trig_insert_after_row || + resultRelInfo->ri_TrigDesc->trig_insert_new_table)) + { + Oid relid = RelationGetRelid(resultRelInfo->ri_RelationDesc); + + for (i = 0; i < inserted; i++) + { + TupleTableSlot *slot = rslots[i]; + + /* + * AFTER ROW Triggers might reference the tableoid column, + * so (re-)initialize tts_tableOid before evaluating them. + */ + slot->tts_tableOid = relid; + + ExecARInsertTriggers(estate, resultRelInfo, + slot, NIL, + cstate->transition_capture); + } + } Since foreign tables cannot have transition tables, we have trig_insert_new_table=false. So I simplified the if test and added an assertion ensuring trig_insert_new_table=false. Attached is a new version of the patch. I tweaked some comments a bit as well. I think the patch is committable. So I plan on committing it next week if there are no objections. Best regards, Etsuro Fujita
v4-0001-Implementation-of-a-Bulk-COPY-FROM-efujita-4.patch
Description: Binary data