sql >> Databáze >  >> RDS >> PostgreSQL

Velikost tabulky oddílů v PostgreSQL 9.0

V PostgreSQL je každá tabulka objektem, pomocí pg_relation_size(‘název_objektu’) získáte velikost objektu. Pokud odešlete tabulku oddílů na místo ‚jméno_objektu‘, poskytne pouze tuto velikost objektu, ale ne velikosti podřízených tabulek.

Podívejte se na příklad uvedený níže.

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() v nadřazené tabulce neposkytne přesnou velikost.

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

Chcete-li dosáhnout velikosti tabulky oddílů, musíte nejprve znát příslušné podřízené tabulky a jejich velikosti. Použití tabulky katalogu pg_inherits pomůže získat informace o podřízených tabulkách s velikostmi a později je sečíst pro přesnou velikost. Pokusil jsem se napsat malou funkci pomocí pg_inherits, abych to udělal.

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;

Nyní odešlete tabulku oddílů funkci.

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

Není to užitečné? Pište své komentáře, velmi je oceníme.


  1. bbPress:Jak najít mapování příloh k jejich příslušným příspěvkům

  2. Pokus o získání vlastnosti neobjektu - CodeIgniter

  3. Zastavit (dlouho) spouštění SQL dotazu v PostgreSQL, když relace nebo požadavky již neexistují?

  4. Aktualizujte pomocí Join dotazu v Oracle