Thread
Commits
-
Avoid useless "x = ANY(ARRAY[])" test for empty partition list.
- 5efccc1cb430 10.0 landed
-
fix empty array expression in get_qual_for_list()
Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> — 2017-06-26T11:23:27Z
Hi, In case of list partitioned table: 1. If there is a partition accepting only null values and nothing else, then currently the partition constraints for such a partition are constructed as "((a IS NULL) OR (a = ANY (ARRAY[]::integer[])))". I think there it is better to avoid constructing an empty array to avoid executing ANY expression. 2.Also, we are constructing an expression using index 0 of arrays in PartitionKey since currently we have only one column for list partition in key, added an assert for this. PFA. Regards, Jeevan Ladhe
-
Re: fix empty array expression in get_qual_for_list()
Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> — 2017-06-26T11:30:15Z
Here is an example: create table t1 ( a int) partition by list (a); create table t11 partition of t1 for values in (null); *Current constraints:* postgres=# \d+ t11; Table "public.t11" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+---------+-----------+----------+---------+---------+--------------+------------- a | integer | | | | plain | | Partition of: t1 FOR VALUES IN (NULL) Partition constraint: ((a IS NULL) OR (a = ANY (ARRAY[]::integer[]))) *Constraints after fix:* postgres=# \d+ t11; Table "public.t11" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+---------+-----------+----------+---------+---------+--------------+------------- a | integer | | | | plain | | Partition of: t1 FOR VALUES IN (NULL) Partition constraint: (a IS NULL) Regards, Jeevan Ladhe On Mon, Jun 26, 2017 at 4:53 PM, Jeevan Ladhe <jeevan.ladhe@enterprisedb.com > wrote: > Hi, > > In case of list partitioned table: > 1. If there is a partition accepting only null values and nothing else, > then > currently the partition constraints for such a partition are constructed as > "((a IS NULL) OR (a = ANY (ARRAY[]::integer[])))". > I think there it is better to avoid constructing an empty array to avoid > executing ANY expression. > > 2.Also, we are constructing an expression using index 0 of arrays in > PartitionKey since currently we have only one column for list partition in > key, > added an assert for this. > > PFA. > > Regards, > Jeevan Ladhe > -
Re: fix empty array expression in get_qual_for_list()
Tom Lane <tgl@sss.pgh.pa.us> — 2017-06-26T14:44:07Z
Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> writes: > In case of list partitioned table: > 1. If there is a partition accepting only null values and nothing else, then > currently the partition constraints for such a partition are constructed as > "((a IS NULL) OR (a = ANY (ARRAY[]::integer[])))". > I think there it is better to avoid constructing an empty array to avoid > executing ANY expression. Looks like a good idea, pushed with trivial stylistic adjustments. regards, tom lane
-
Re: fix empty array expression in get_qual_for_list()
Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> — 2017-06-26T17:38:19Z
On Mon, Jun 26, 2017 at 8:14 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> writes: > > In case of list partitioned table: > > 1. If there is a partition accepting only null values and nothing else, > then > > currently the partition constraints for such a partition are constructed > as > > "((a IS NULL) OR (a = ANY (ARRAY[]::integer[])))". > > I think there it is better to avoid constructing an empty array to avoid > > executing ANY expression. > > Looks like a good idea, pushed with trivial stylistic adjustments. > Thanks Tom for taking care of this. Regards, Jeevan Ladhe