Commit cfbecf81 authored by Robert Haas's avatar Robert Haas

Enforce child constraints during COPY TO a partitioned table.

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
parent 870d8960
...@@ -2709,7 +2709,8 @@ CopyFrom(CopyState cstate) ...@@ -2709,7 +2709,8 @@ CopyFrom(CopyState cstate)
check_partition_constr = false; check_partition_constr = false;
/* Check the constraints of the tuple */ /* 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); ExecConstraints(resultRelInfo, slot, estate, true);
if (useHeapMultiInsert) if (useHeapMultiInsert)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment