Hi Dilip,
Thanks for looking at the patch.
On 2017/09/15 13:43, Dilip Kumar wrote:
> On Wed, Sep 6, 2017 at 4:08 PM, Amit Langote
>> [PATCH 2/5] WIP: planner-side changes for partition-pruning
>>
>> This patch adds a stub get_partitions_for_keys in partition.c with a
>> suitable interface for the caller to pass bounding keys extracted from the
>> query and other related information.
>>
>> Importantly, it implements the logic within the planner to match query's
>> scan keys to a parent table's partition key and form the bounding keys
>> that will be passed to partition.c to compute the list of partitions that
>> satisfy those bounds.
>
> + Node *leftop = get_leftop(clause);
> +
> + if (IsA(leftop, RelabelType))
> + leftop = (Node *) ((RelabelType *) leftop)->arg;
> +
> + if (equal(leftop, partkey))
>
> It appears that this patch always assume that clause will be of form
> "var op const", but it can also be "const op var"
>
> That's the reason in below example where in both the queries condition
> is same it can only prune in the first case but not in the second.
>
> postgres=# explain select * from t where t.a < 2;
> QUERY PLAN
> --------------------------------------------------------
> Append (cost=0.00..2.24 rows=1 width=8)
> -> Seq Scan on t1 (cost=0.00..2.24 rows=1 width=8)
> Filter: (a < 2)
> (3 rows)
>
> postgres=# explain select * from t where 2>t.a;
> QUERY PLAN
> --------------------------------------------------------
> Append (cost=0.00..4.49 rows=2 width=8)
> -> Seq Scan on t1 (cost=0.00..2.24 rows=1 width=8)
> Filter: (2 > a)
> -> Seq Scan on t2 (cost=0.00..2.25 rows=1 width=8)
> Filter: (2 > a)
> (5 rows)
Yeah, there are a bunch of smarts still missing in that patch as it is.
Thanks,
Amit
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers