aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/tablecmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r--src/backend/commands/tablecmds.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index e559afb9dfd..46a648a33ab 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -13719,7 +13719,7 @@ PartConstraintImpliedByRelConstraint(Relation scanrel,
* fail to detect valid matches without this.
*/
cexpr = eval_const_expressions(NULL, cexpr);
- cexpr = (Node *) canonicalize_qual((Expr *) cexpr);
+ cexpr = (Node *) canonicalize_qual((Expr *) cexpr, true);
existConstraint = list_concat(existConstraint,
make_ands_implicit((Expr *) cexpr));
@@ -14058,10 +14058,18 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
/* Skip validation if there are no constraints to validate. */
if (partConstraint)
{
+ /*
+ * Run the partition quals through const-simplification similar to
+ * check constraints. We skip canonicalize_qual, though, because
+ * partition quals should be in canonical form already; also, since
+ * the qual is in implicit-AND format, we'd have to explicitly convert
+ * it to explicit-AND format and back again.
+ */
partConstraint =
(List *) eval_const_expressions(NULL,
(Node *) partConstraint);
- partConstraint = (List *) canonicalize_qual((Expr *) partConstraint);
+
+ /* XXX this sure looks wrong */
partConstraint = list_make1(make_ands_explicit(partConstraint));
/*