mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Allow batching of inserts during cross-partition updates.
Commit927f453a9
disallowed batching added by commitb663a4136
to be used for the inserts performed as part of cross-partition updates of partitioned tables, mainly because the previous code in nodeModifyTable.c couldn't handle pending inserts into foreign-table partitions that are also UPDATE target partitions. But we don't have such a limitation anymore (cf. commitffbb7e65a
), so let's allow for this by removing from execPartition.c the restriction added by commit927f453a9
that batching is only allowed if the query command type is CMD_INSERT. In postgres_fdw, since commit86dc90056
changed it to effectively disable cross-partition updates in the case where a foreign-table partition chosen to insert rows into is also an UPDATE target partition, allow batching in the case where a foreign-table partition chosen to do so is *not* also an UPDATE target partition. This is enabled by the "batch_size" option added by commitb663a4136
, which is disabled by default. This patch also adjusts the test case added by commit927f453a9
to confirm that the inserts performed as part of a cross-partition update of a partitioned table indeed uses batching. Amit Langote, reviewed and/or tested by Georgios Kokolatos, Zhihong Yu, Bharath Rupireddy, Hou Zhijie, Vignesh C, and me. Discussion: http://postgr.es/m/CA%2BHiwqH1Lz1yJmPs%3DaD-pzd_HLLynLHvq5iYeT9mB0bBV7oJ6w%40mail.gmail.com
This commit is contained in:
@ -2017,16 +2017,16 @@ static int
|
||||
postgresGetForeignModifyBatchSize(ResultRelInfo *resultRelInfo)
|
||||
{
|
||||
int batch_size;
|
||||
PgFdwModifyState *fmstate = resultRelInfo->ri_FdwState ?
|
||||
(PgFdwModifyState *) resultRelInfo->ri_FdwState :
|
||||
NULL;
|
||||
PgFdwModifyState *fmstate = (PgFdwModifyState *) resultRelInfo->ri_FdwState;
|
||||
|
||||
/* should be called only once */
|
||||
Assert(resultRelInfo->ri_BatchSize == 0);
|
||||
|
||||
/*
|
||||
* Should never get called when the insert is being performed as part of a
|
||||
* row movement operation.
|
||||
* Should never get called when the insert is being performed on a table
|
||||
* that is also among the target relations of an UPDATE operation,
|
||||
* because postgresBeginForeignInsert() currently rejects such insert
|
||||
* attempts.
|
||||
*/
|
||||
Assert(fmstate == NULL || fmstate->aux_fmstate == NULL);
|
||||
|
||||
|
Reference in New Issue
Block a user