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.