sql >> Base de Datos >  >> RDS >> PostgreSQL

Tamaño de la tabla de particiones en PostgreSQL 9.0

En PostgreSQL, cada tabla es un objeto, usar pg_relation_size('object_name') dará el tamaño del objeto. Si envía la tabla de particiones en lugar de 'object_name', solo proporciona el tamaño de ese objeto, pero no los tamaños de las tablas secundarias.

Mira el ejemplo que se da a continuación.

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() en la tabla principal no dará el tamaño exacto.

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

Para lograr el tamaño de la tabla de partición, primero conozca las tablas secundarias en cuestión y sus tamaños. El uso de la tabla de catálogo pg_inherits ayudará a obtener la información de las tablas secundarias con tamaños y luego las sumará para obtener el tamaño exacto. He intentado escribir una pequeña función usando pg_inherits para hacerlo.

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;

Ahora, envíe la tabla de particiones a la función.

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

¿No es útil? Publique sus comentarios, serán muy apreciados.