PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Taille de la table de partition dans PostgreSQL 9.0

Dans PostgreSQL, chaque table est un objet, l'utilisation de pg_relation_size('object_name') donnera la taille de l'objet. Si vous envoyez la table de partition à la place de 'object_name', cela ne donne que la taille de l'objet mais pas la taille des tables enfants.

Découvrez l'exemple ci-dessous.

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() sur la table parent ne donnera pas la taille exacte.

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

Pour atteindre la taille de la table de partition, commencez par connaître les tables enfants concernées et leurs tailles. L'utilisation de la table de catalogue pg_inherits vous aidera à obtenir les informations des tables enfants avec des tailles et à les additionner ultérieurement pour obtenir la taille exacte. J'ai essayé d'écrire une petite fonction en utilisant pg_inherits pour le faire.

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;

Maintenant, envoyez la table de partition à la fonction.

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

N'est-il pas utile. Postez vos commentaires, ils seront grandement appréciés.