Thread

Commits

  1. Avoid useless "x = ANY(ARRAY[])" test for empty partition list.

  1. 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
    
  2. 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
    >
    
  3. 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
    
    
    
  4. 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