The previous coding inadvertently checked the constraints for the
partitioned table rather than the target partition, which could
lead to data in a partition that fails to satisfy some constraint
on that partition. This problem seems to date back to when
table partitioning was introduced; prior to that, there was only
one target table for a COPY, so the problem didn't occur, and the
code just didn't get updated.
Etsuro Fujita, reviewed by Amit Langote and Ashutosh Bapat
Discussion: https://postgr.es/message-id/
5ABA4074.
1090500%40lab.ntt.co.jp
check_partition_constr = false;
/* Check the constraints of the tuple */
- if (cstate->rel->rd_att->constr || check_partition_constr)
+ if (resultRelInfo->ri_RelationDesc->rd_att->constr ||
+ check_partition_constr)
ExecConstraints(resultRelInfo, slot, estate, true);
if (useHeapMultiInsert)