mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08:00
Fix initialization of FDW batching in ExecInitModifyTable
ExecInitModifyTable has to initialize batching for all result relations, not just the first one. Furthermore, when junk filters were necessary, the pointer pointed past the mtstate->resultRelInfo array. Per reports from multiple non-x86 animals (florican, locust, ...). Discussion: https://postgr.es/m/20200628151002.7x5laxwpgvkyiu3q@development
This commit is contained in:
parent
733d670073
commit
920f853dc9
@ -2797,18 +2797,29 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
|
||||
* Determine if the FDW supports batch insert and determine the batch
|
||||
* size (a FDW may support batching, but it may be disabled for the
|
||||
* server/table).
|
||||
*
|
||||
* We only do this for INSERT, so that for UPDATE/DELETE the batch
|
||||
* size remains set to 0.
|
||||
*/
|
||||
if (!resultRelInfo->ri_usesFdwDirectModify &&
|
||||
operation == CMD_INSERT &&
|
||||
resultRelInfo->ri_FdwRoutine != NULL &&
|
||||
resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize &&
|
||||
resultRelInfo->ri_FdwRoutine->ExecForeignBatchInsert)
|
||||
resultRelInfo->ri_BatchSize =
|
||||
resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize(resultRelInfo);
|
||||
else
|
||||
resultRelInfo->ri_BatchSize = 1;
|
||||
if (operation == CMD_INSERT)
|
||||
{
|
||||
resultRelInfo = mtstate->resultRelInfo;
|
||||
for (i = 0; i < nplans; i++)
|
||||
{
|
||||
if (!resultRelInfo->ri_usesFdwDirectModify &&
|
||||
resultRelInfo->ri_FdwRoutine != NULL &&
|
||||
resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize &&
|
||||
resultRelInfo->ri_FdwRoutine->ExecForeignBatchInsert)
|
||||
resultRelInfo->ri_BatchSize =
|
||||
resultRelInfo->ri_FdwRoutine->GetForeignModifyBatchSize(resultRelInfo);
|
||||
else
|
||||
resultRelInfo->ri_BatchSize = 1;
|
||||
|
||||
Assert(resultRelInfo->ri_BatchSize >= 1);
|
||||
Assert(resultRelInfo->ri_BatchSize >= 1);
|
||||
|
||||
resultRelInfo++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Lastly, if this is not the primary (canSetTag) ModifyTable node, add it
|
||||
|
Loading…
Reference in New Issue
Block a user