PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Größe der Partitionstabelle in PostgreSQL 9.0

In PostgreSQL ist jede Tabelle ein Objekt, die Verwendung von pg_relation_size(‘object_name’) gibt die Größe des Objekts an. Wenn Sie die Partitionstabelle anstelle von „object_name“ senden, gibt sie nur diese Objektgröße an, aber nicht die Größen von untergeordneten Tabellen.

Sehen Sie sich das Beispiel unten an.

postgres=# dt+
List of relations
Schema | Name | Type | Owner | Size | Description
--------+---------------+-------+----------+------------+-------------
public | child1 | table | postgres | 8192 bytes |
public | child2 | table | postgres | 8192 bytes |
public | parent | table | postgres | 0 bytes |
(3 rows)

pg_relation_size() in der übergeordneten Tabelle gibt nicht die genaue Größe an.

postgres=# select pg_size_pretty(pg_relation_size('parent'));
pg_size_pretty
----------------
0 bytes
(1 row)

Um die Größe der Partitionstabelle zu erreichen, müssen Sie zunächst die betroffenen untergeordneten Tabellen und ihre Größen kennen. Die Verwendung der Katalogtabelle pg_inherits hilft beim Abrufen der Informationen von untergeordneten Tabellen mit Größen und summiert sie später für die genaue Größe. Ich habe versucht, eine kleine Funktion mit pg_inherits zu schreiben, um es zu erledigen.

CREATE OR REPLACE FUNCTION pg_partition_table_size(text) returns numeric as
$$
select sum(to_number(pg_size_pretty(pg_relation_size(inhrelid::regclass)),'999999999')) from pg_inherits where inhparent=$1::regclass;
$$ language sql;

Senden Sie nun die Partitionstabelle an die Funktion.

postgres=# select pg_partition_table_size('parent');
pg_partition_table_size
-------------------------
16384
(1 row)

Ist es nicht sinnvoll. Posten Sie Ihre Kommentare, sie werden sehr geschätzt.