Re: ToDo: show size of partitioned table - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: ToDo: show size of partitioned table
Date
Msg-id CAFj8pRDq4aTcTG5sR68_rnTjmc8-kboZsk=0G2BM+zxi9htkxw@mail.gmail.com
Whole thread Raw
In response to ToDo: show size of partitioned table  (Pavel Stehule <pavel.stehule@gmail.com>)
Responses Re: ToDo: show size of partitioned table
List pgsql-hackers
Hi

čt 16. 8. 2018 v 5:52 odesílatel Mathias Brossard <postgresql@zoinx.org> napsal:
The following review has been posted through the commitfest application:
make installcheck-world:  tested, failed
Implements feature:       tested, passed
Spec compliant:           not tested
Documentation:            tested, passed

Hi,

I'm with Melanie Plageman running the SVPUG Patch Review Meetup. I tested this feature on my Mac. The patch applied cleanly on master, and the feature worked as expected with the SQL at the bottom of this email (Jesse Zhang suggested the two-level partitioning). installcheck passed but installcheck-world did not.

I do have a feedback on the implementation. The code tries to support older PostgreSQL server versions when declarative partitions were not supported before version 10 (relkind value of 'p'). Those versions will never return any result from the query being built. So I would suggest an early return from the function. The upside would be that the query building would be simpler. I can make patch implementing that suggestion if you want.

This is question - maybe we can support older partitioning based on only inheritance - and the query can be more exact on PostgreSQL 10 and newer.

Please, send any patch. You are welcome.

Regards

Pavel
 

Sincerely,
-- Mathias Brossard


CREATE TABLE partition (
    part  int not null,
    value int not null
) PARTITION BY RANGE (part);

CREATE TABLE partition_0 PARTITION OF partition FOR VALUES FROM (0) TO (10);
CREATE TABLE partition_1 PARTITION OF partition FOR VALUES FROM (10) TO (20);
CREATE TABLE partition_2 PARTITION OF partition FOR VALUES FROM (20) TO (30);
CREATE TABLE partition_3 PARTITION OF partition FOR VALUES FROM (30) TO (40);
CREATE TABLE partition_4 PARTITION OF partition FOR VALUES FROM (40) TO (50);
CREATE TABLE partition_5 PARTITION OF partition FOR VALUES FROM (50) TO (60);
CREATE TABLE partition_6 PARTITION OF partition FOR VALUES FROM (60) TO (70);
CREATE TABLE partition_7 PARTITION OF partition FOR VALUES FROM (70) TO (80);
CREATE TABLE partition_8 PARTITION OF partition FOR VALUES FROM (80) TO (90);
CREATE TABLE partition_9 (
    part  int not null,
    value int not null
) PARTITION BY RANGE (part);

CREATE TABLE partition_9a PARTITION OF partition_9 FOR VALUES FROM (90) TO (95);
CREATE TABLE partition_9b PARTITION OF partition_9 FOR VALUES FROM (95) TO (100);
ALTER TABLE partition ATTACH PARTITION partition_9 FOR VALUES FROM (90) TO (100);

INSERT INTO partition SELECT i % 100 AS part, i AS value FROM generate_series(1, 1000000) AS i;

-------------------
-- Below is the resulting output

test=# \dt+
                         List of relations
 Schema |     Name     | Type  |   Owner   |  Size   | Description
--------+--------------+-------+-----------+---------+-------------
 public | partition    | table | mbrossard | 0 bytes |
 public | partition_0  | table | mbrossard | 3568 kB |
 public | partition_1  | table | mbrossard | 3568 kB |
 public | partition_2  | table | mbrossard | 3568 kB |
 public | partition_3  | table | mbrossard | 3568 kB |
 public | partition_4  | table | mbrossard | 3568 kB |
 public | partition_5  | table | mbrossard | 3568 kB |
 public | partition_6  | table | mbrossard | 3568 kB |
 public | partition_7  | table | mbrossard | 3568 kB |
 public | partition_8  | table | mbrossard | 3568 kB |
 public | partition_9  | table | mbrossard | 0 bytes |
 public | partition_9a | table | mbrossard | 1800 kB |
 public | partition_9b | table | mbrossard | 1800 kB |
(13 rows)

test=# \dP+
                List of partitioned tables
 Schema |    Name     |   Owner   |  Size   | Description
--------+-------------+-----------+---------+-------------
 public | partition   | mbrossard | 35 MB   |
 public | partition_9 | mbrossard | 3600 kB |
(2 rows)

test=# \dP+ *9
                List of partitioned tables
 Schema |    Name     |   Owner   |  Size   | Description
--------+-------------+-----------+---------+-------------
 public | partition_9 | mbrossard | 3600 kB |
(1 row)

pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: Index Skip Scan
Next
From: Michael Paquier
Date:
Subject: Re: Update comment in errcodes.txt correctly