From cfbecf8100ecb83c07c2017f843b0642580416bf Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Fri, 6 Apr 2018 11:42:28 -0400 Subject: [PATCH] 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 --- src/backend/commands/copy.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index a42861da0d..ae06609a1e 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -2709,7 +2709,8 @@ CopyFrom(CopyState cstate) 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) -- 2.40.0