Multi column range partition table
Amul Sul <sulamul@gmail.com>
From: amul sul <sulamul@gmail.com>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2017-06-22T11:48:28Z
Lists: pgsql-hackers
Hi, While working on the another patch, I came across the case where I need an auto generated partition for a mutil-column range partitioned table having following range bound: PARTITION p1 FROM (UNBOUNDED, UNBOUNDED) TO (10, 10) PARTITION p2 FROM (10, 10) TO (10, UNBOUNDED) PARTITION p3 FROM (10, UNBOUNDED) TO (20, 10) PARTITION p4 FROM (20, 10) TO (20, UNBOUNDED) PARTITION p5 FROM (20, UNBOUNDED) TO (UNBOUNDED, UNBOUNDED) In this, a lower bound of the partition is an upper bound of the previous partition. While trying to create p3 partition with (10, UNBOUNDED) to (20, 10) bound, got an overlap partition error. Here is the SQL to reproduced this error: CREATE TABLE range_parted ( i1 int, i2 int ) PARTITION BY RANGE (i1, i2); CREATE TABLE p1 PARTITION OF range_parted FOR VALUES FROM (UNBOUNDED, UNBOUNDED) TO (10, 10); CREATE TABLE p2 PARTITION OF range_parted FOR VALUES FROM (10, 10) TO (10, UNBOUNDED); CREATE TABLE p3 PARTITION OF tab1 FOR VALUES FROM (10, UNBOUNDED) TO (20, 10); ERROR: partition "p3" would overlap partition "tab1_p_10_10" This happened because of UNBOUNDED handling, where it is a negative infinite if it is in FROM clause. Wondering can't we explicitly treat this as a positive infinite value, can we? Thoughts/Comments? Regards, Amul
Commits
-
Use MINVALUE/MAXVALUE instead of UNBOUNDED for range partition bounds.
- d363d42bb9a4 10.0 landed
-
Clarify the contract of partition_rbound_cmp().
- f1dae097f294 10.0 landed
-
Simplify the logic checking new range partition bounds.
- c03911d9454a 10.0 landed