• Michael Paquier's avatar
    Fix crash when using partition bound expressions · cdde886d
    Michael Paquier authored
    Since 7c079d74, partition bounds are able to use generalized expression
    syntax when processed, treating "minvalue" and "maxvalue" as specific
    cases as they get passed down for transformation as a column references.
    
    The checks for infinite bounds in range expressions have been lax
    though, causing crashes when trying to use column reference names with
    more than one field.  Here is an example causing a crash:
    CREATE TABLE list_parted (a int) PARTITION BY LIST (a);
    CREATE TABLE part_list_crash PARTITION OF list_parted
      FOR VALUES IN (somename.somename);
    
    Note that the creation of the second relation should fail as partition
    bounds cannot have column references in their expressions, so when
    finding an expression which does not match the expected infinite bounds,
    then this commit lets the generic transformation machinery check after
    it.  The error message generated in this case references as well a
    missing RTE, which is confusing.  This problem will be treated
    separately as it impacts as well default expressions for some time, and
    for now only the cases where a crash can happen are fixed.
    
    While on it, extend the set of regression tests in place for list
    partition bounds and add an extra set for range partition bounds.
    
    Reported-by: Alexander Lakhin
    Author: Michael Paquier
    Reviewed-by: Amit Langote
    Discussion: https://postgr.es/m/15668-0377b1981aa1a393@postgresql.org
    cdde886d
create_table.sql 27.5 KB