PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Dimensione della tabella delle partizioni in PostgreSQL 9.0

In PostgreSQL, ogni tabella è un oggetto, usando pg_relation_size('object_name') darà la dimensione dell'oggetto. Se invii la tabella delle partizioni al posto di "nome_oggetto", fornisce solo la dimensione dell'oggetto ma non le dimensioni delle tabelle figlio.

Dai un'occhiata all'esempio riportato di seguito.

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() sulla tabella padre non darà la dimensione esatta.

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

Per ottenere le dimensioni della tabella delle partizioni, conoscere innanzitutto le tabelle figlio interessate e le relative dimensioni. L'uso della tabella del catalogo pg_inherits aiuterà a ottenere le informazioni delle tabelle figli con le dimensioni e successivamente a sommarle per la dimensione esatta. Ho provato a scrivere una piccola funzione usando pg_inherits per farlo.

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;

Ora, invia la tabella delle partizioni alla funzione.

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

Non è utile? Pubblica i tuoi commenti, saranno molto apprezzati.