sql >> Databasteknik >  >> RDS >> PostgreSQL

Storlek på partitionstabell i PostgreSQL 9.0

I PostgreSQL är varje tabell ett objekt, med hjälp av pg_relation_size('object_name') kommer att ge storleken på objektet. Om du skickar partitionstabellen i stället för 'objektnamn', ger den bara den objektstorleken men inte storleken på underordnade tabeller.

Kolla in exemplet nedan.

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å den överordnade tabellen ger inte den exakta storleken.

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

För att uppnå partitionstabellstorlek, först känna till de berörda underordnade tabellerna och dess storlekar. Att använda pg_inherits katalogtabell hjälper till att få information om underordnade tabeller med storlekar och senare summera dem för exakt storlek. Jag har försökt skriva en liten funktion med pg_inherits för att 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;

Skicka nu partitionstabellen till funktionen.

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

Är det inte användbart. Skriv dina kommentarer, de kommer att bli mycket uppskattade.


  1. Postgres INTERVAL med värde från tabell

  2. Varför ignorerar SQL Server det tomma utrymmet i slutet automatiskt?

  3. Hur man kontrollerar om en tabell finns i ett givet schema

  4. Naturlig sort som stöder stora siffror