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

Størrelse på partitionstabel i PostgreSQL 9.0

I PostgreSQL er hver tabel et objekt, brug af pg_relation_size('objekt_navn') vil give størrelsen på objektet. Hvis du sender partitionstabellen i stedet for 'objektnavn', giver den kun denne objektstørrelse, men ikke størrelsen af ​​underordnede tabeller.

Se eksemplet nedenfor.

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() på overordnet tabel vil ikke give den nøjagtige størrelse.

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

For at opnå partitionstabelstørrelse skal du først kende de pågældende underordnede tabeller og dens størrelser. Brug af pg_inherits katalogtabel vil hjælpe med at få oplysninger om underordnede tabeller med størrelser og senere summere dem til nøjagtig størrelse. Jeg har prøvet at skrive en lille funktion ved hjælp af pg_inherits for at få det gjort.

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;

Send nu partitionstabellen til funktionen.

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

Er det ikke brugbart. Skriv dine kommentarer, de vil blive meget værdsat.


  1. SQL Group BY, Top N elementer for hver gruppe

  2. SSIS - værdien kan ikke konverteres på grund af et potentielt tab af data

  3. HVOR vs AT HAVE

  4. Sådan castes DateTime til Time