Query regarding RANGE Partitioning

Поиск
Список
Период
Сортировка
От Nitin Jadhav
Тема Query regarding RANGE Partitioning
Дата
Msg-id CAMm1aWZ0G1Q1ZW2ePKJ6Ew6BOvojhRPC1hRw=2k8AFoB00RdqQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: Query regarding RANGE Partitioning  (Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>)
Re: Query regarding RANGE Partitioning  (Jeevan Ladhe <jeevan.ladhe@enterprisedb.com>)
Список pgsql-hackers
Hi,

I am not convinced with the following behaviour of RANGE Partitioning.
Kindly let me know if this is expected behaviour or it should be changed.

Case-1:
postgres@68941=#create table r(a int, b int) partition by range(a,b);
CREATE TABLE
postgres@68941=#create table r1 partition of r for values from (100,0) to (200,100);
CREATE TABLE
postgres@68941=#create table r2 partition of r for values from (400,200) to (500,300);
CREATE TABLE
postgres@68941=#create table r3 partition of r for values from (0,100) to (100,200);
ERROR:  partition "r3" would overlap partition "r1"
LINE 1: ...able r3 partition of r for values from (0,100) to (100,200);

As we can see here, I am trying to create a partition table with ranges from (0,100) to (100,200)
which is actually not overlapped with any of the existing partitions. But I am getting error saying,
it overlaps with partition 'r1'. 

Case-2:
postgres@68941=#\d+ r
                                      Partitioned table "public.r"
 Column |  Type   | Collation | Nullable | Default | Storage | Compression | Stats target | Description 
--------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
 a      | integer |           |          |         | plain   |             |              | 
 b      | integer |           |          |         | plain   |             |              | 
Partition key: RANGE (a, b)
Partitions: r1 FOR VALUES FROM (100, 0) TO (200, 100),
            r2 FOR VALUES FROM (400, 200) TO (500, 300),
            r3 FOR VALUES FROM (200, 100) TO (300, 200)

postgres@68941=#insert into r values(300, 50);
INSERT 0 1
postgres@68941=#select * from r3;
  a  |  b  
-----+-----
 300 |  50
(2 rows)

As per my understanding, in the range partitioned table, lower bound is included and upper bound is excluded.
and in case of multi-column partition keys, the row comparison operator is used for tuple routing which means
the columns are compared left to right. If the partition key value is equal to the upper bound of that column then 
the next column will be considered.

So, In case of insertion of row (300, 50). Based on the understanding, partition 'r3' should have rejected it.

Kindly confirm whether the above is expected or not. If expected, kindly explain.

Thanks and Regards,
Nitin Jadhav


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: batch fdw insert bug (Postgres 14)
Следующее
От: Ashutosh Bapat
Дата:
Сообщение: Re: Query regarding RANGE Partitioning