At Mon, 08 Apr 2019 20:42:51 +0900 (Tokyo Standard Time), Kyotaro HORIGUCHI 
<horiguchi.kyot...@lab.ntt.co.jp> wrote in 
<20190408.204251.143128146.horiguchi.kyot...@lab.ntt.co.jp>
> At Mon, 8 Apr 2019 16:57:35 +0900, "Yuzuko Hosoya" 
> <hosoya.yuz...@lab.ntt.co.jp> wrote in 
> <00c101d4ede0$babd4390$3037cab0$@lab.ntt.co.jp>
> > > BTW, now I'm a bit puzzled between whether this case should be fixed by 
> > > hacking on partprune.c like
> > > this patch does or whether to work on getting the other patch committed 
> > > and expect users to set
> > > constraint_exclusion = on for this to behave as expected.  The original 
> > > intention of setting
> > > partition_qual in set_relation_partition_info() was for partprune.c to 
> > > use it to remove useless
> > > arguments of OR clauses which otherwise would cause the failure to 
> > > correctly prune the default partitions
> > > of sub-partitioned tables.  As shown by the examples in this thread, the 
> > > original effort was
> > > insufficient, which this patch aims to improve.  But, it also expands the 
> > > scope of partprune.c's usage
> > > of partition_qual, which is to effectively perform full-blown constraint 
> > > exclusion without being
> > > controllable by constraint_exclusion GUC, which may be seen as being good 
> > > or bad.  The fact that it
> > > helps in getting partition pruning working correctly in more obscure 
> > > cases like those discussed in
> > > this thread means it's good maybe.
> > > 
> > Umm, even though this modification might be overhead, I think this problem 
> > should be solved
> > without setting constraint_exclusion GUC. But I'm not sure.
> 
> Partition pruning and constraint exclusion are orthogonal
> functions. Note that the default value of the variable is
> CONSTRAINT_EXCLUSION_PARTITION and the behavior is not a perfect
> bug.  So I think we can reasonably ignore constraints when
> constraint_exclusion is intentionally turned off.

> As the result I propose to move the "if(partconstr)" block in the
> latest patches after the constant-false block, changing the
> condition as "if (partconstr && constraint_exclusion !=
> CONSTRAINT_EXCLUSION_OFF)".

Mmm. Something is wrong. I should have been sleeping at the
time. In my opinion, what we should there is:

- Try partition pruning first.

- If the partition was not pruned, and constraint is set, check
  for constant false.

- if constraint_exclusion is turned on and constraint is set,
  examine the constraint.

Sorry for the stupidity.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center



Reply via email to