diff options
author | Robert Haas <rhaas@postgresql.org> | 2018-04-06 11:42:28 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2018-04-06 11:42:28 -0400 |
commit | cfbecf8100ecb83c07c2017f843b0642580416bf (patch) | |
tree | 3c4f6a571524d298876103fcd0a3bf0deebfaee0 | |
parent | 870d89608e5f891275d0b752560c827dbce3d7b4 (diff) | |
download | postgresql-cfbecf8100ecb83c07c2017f843b0642580416bf.tar.gz postgresql-cfbecf8100ecb83c07c2017f843b0642580416bf.zip |
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
-rw-r--r-- | src/backend/commands/copy.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index a42861da0df..ae06609a1e1 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) |