2013-08-19 4 views
17

In einer Tabelle in Postgres 9.1 ist eine Spalte vom Typ text enthalten. Ich würde gerne wissen, wie sich genau diese Spalte auf den benötigten Speicherplatz auswirkt. Es muss nicht genau sein, aber ich würde gerne eine Idee bekommen, ob diese Spalte für 20%/30%/... des von der Datenbank belegten Speicherplatzes verantwortlich ist.Wie schätzen Sie die Größe einer Spalte in einer Postgres-Tabelle ein?

Ich kenne pg_relation_size, aber es funktioniert nur auf Tabellenebene.

Ich habe viele Datenbanken mit dem gleichen Schema. Ich habe einen kleineren ausgegeben und die Spalte mit grep ausgeschnitten und die Größe der Klartext-Dumps verglichen. Dies ist jedoch nicht unbedingt ein guter Indikator für den Speicherplatzbedarf in der Live-Datenbank, und es ist auch schwieriger, dies für große Datenbanken zu tun.

Antwort

31
select 
    sum(pg_column_size(the_text_column)) as total_size, 
    avg(pg_column_size(the_text_column)) as average_size, 
    sum(pg_column_size(the_text_column)) * 100.0/pg_relation_size('t') as percentage 
from t; 
+7

pg_relation_size gibt die Größe der Basistabelle ohne die Toast-Tabelle zurück. Wenn sich jemand für die Festplattennutzung jeder Spalte interessiert, ist es wahrscheinlich, dass eine Toast-Tabelle involviert ist, also möchten Sie wahrscheinlich stattdessen pg_table_size verwenden. – jjanes

+5

Sie können auch pg_total_relation_size verwenden, wenn Sie die Toast-Tabelle plus die Größe der Indizes zählen möchten. –

Verwandte Themen