PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Tamanho da tabela de partição no PostgreSQL 9.0


No PostgreSQL, toda tabela é um objeto, usando pg_relation_size(‘object_name’) dará o tamanho do objeto. Se você enviar a tabela de partição no lugar de 'object_name', ela fornecerá apenas o tamanho do objeto, mas não os tamanhos das tabelas filhas.

Confira o exemplo dado abaixo.
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() na tabela pai não fornecerá o tamanho exato.
postgres=# select pg_size_pretty(pg_relation_size('parent'));
pg_size_pretty
----------------
0 bytes
(1 row)

Para obter o tamanho da tabela de partição, primeiro conheça as tabelas filhas em questão e seus tamanhos. O uso da tabela de catálogo pg_inherits ajudará a obter as informações das tabelas filhas com tamanhos e, posteriormente, somá-las para o tamanho exato. Eu tentei escrever uma pequena função usando pg_inherits para fazê-lo.
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;

Agora, envie a tabela de partição para a função.
postgres=# select pg_partition_table_size('parent');
pg_partition_table_size
-------------------------
16384
(1 row)

Não é útil. Poste seus comentários, eles serão muito apreciados.