Wie kann ich alle Tabellen einer PostgreSQL-Datenbank auflisten und nach Größe sortieren ?
Wie kann ich alle Tabellen einer PostgreSQL-Datenbank auflisten und nach Größe sortieren ?
Antworten:
select table_name, pg_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'public'
order by 2
Dies zeigt Ihnen die Größe aller Tabellen im Schema, public
wenn Sie mehrere Schemas haben, die Sie möglicherweise verwenden möchten:
select table_schema, table_name, pg_relation_size('"'||table_schema||'"."'||table_name||'"')
from information_schema.tables
order by 3
SQLFiddle-Beispiel: http://sqlfiddle.com/#!15/13157/3
Liste aller Objektgrößenfunktionen im Handbuch .
select table_schema, table_name, pg_relation_size(table_schema||'.'||table_name) from information_schema.tables order by 3;
Danke für die Hilfe!
select * from information_schema.tables where table_schema = 'public';
liefert null Zeilen, obwohl \dn
das Schema public angezeigt wird. Vielleicht hat eine Änderung in 9.5 dies verursacht?
Dies zeigt Ihnen den Schemanamen, den Tabellennamen, die hübsche Größe und die Größe (für die Sortierung erforderlich).
SELECT
schema_name,
relname,
pg_size_pretty(table_size) AS size,
table_size
FROM (
SELECT
pg_catalog.pg_namespace.nspname AS schema_name,
relname,
pg_relation_size(pg_catalog.pg_class.oid) AS table_size
FROM pg_catalog.pg_class
JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
) t
WHERE schema_name NOT LIKE 'pg_%'
ORDER BY table_size DESC;
Ich erstelle dies basierend auf den Lösungen aus dieser Liste von Schemas mit Größen (relativ und absolut) in einer PostgreSQL-Datenbank
Dies wird klarer.
pg_size_pretty(<numeric_value>)
- Konvertiert die Anzahl der Bytes in ein lesbares Format.
pg_database_size(<db_name>)
- Ruft die Datenbankgröße in Bytes ab .
pg_total_relation_size(<relation_name>)
- Ruft die Gesamtgröße der Tabelle und ihren Index in Bytes ab .
pg_relation_size(<relation_name>)
- Ruft die Größe der Beziehung (Tabelle / Index) in Bytes ab .
pg_index_size(<relation_name>)
- Ruft die Indexgröße der Beziehung in Bytes ab .
current_database()
- Ruft die aktuell verwendete Datenbank ab, für die diese Abfrage ausgeführt wird.
Abfrage:
select current_database() as database,
pg_size_pretty(total_database_size) as total_database_size,
schema_name,
table_name,
pg_size_pretty(total_table_size) as total_table_size,
pg_size_pretty(table_size) as table_size,
pg_size_pretty(index_size) as index_size
from ( select table_name,
table_schema as schema_name,
pg_database_size(current_database()) as total_database_size,
pg_total_relation_size(table_name) as total_table_size,
pg_relation_size(table_name) as table_size,
pg_indexes_size(table_name) as index_size
from information_schema.tables
where table_schema=current_schema() and table_name like 'table_%'
order by total_table_size
) as sizes;
Ergebnis:
database | total_database_size | schema_name | table_name | total_table_size | table_size | index_size
-----------+---------------------+-------------+------------+------------------+------------+------------
vigneshdb | 1586 MB | corpdata | table_aaa | 16 kB | 0 bytes | 8192 bytes
vigneshdb | 1586 MB | corpdata | table_bbb | 24 kB | 0 bytes | 16 kB
vigneshdb | 1586 MB | corpdata | table_ccc | 640 kB | 112 kB | 488 kB
vigneshdb | 1586 MB | corpdata | table_ddd | 9760 kB | 3152 kB | 6568 kB
vigneshdb | 1586 MB | corpdata | table_eee | 1120 MB | 311 MB | 808 MB
Das humanisierte Format repräsentiert in bytes
, kB
, MB
, GB
, und TB
.
bytes
zu kB
- beginnt von10240 bytes
bytes
zu MB
- beginnt von 10485248 bytes
= 10239.5 kB
~10 MB
bytes
zu GB
- beginnt von 10736893952 bytes
= 10239.5 MB
~10 BG
bytes
zu TB
- beginnt von 10994579406848 bytes
= 10239.5 GB
~10 TB
Alle Einheitenumrechnungen beginnen ab 10 + <unit>
.
Als Referenz - Offizielle Dokumentation von Postgres
SELECT
relname as "Table",
pg_size_pretty(pg_total_relation_size(relid)) As "Size",
pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as "External Size"
FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
von hier genommen https://wiki-bsse.ethz.ch/display/ITDOC/Check+size+of+tables+and+objects+in+PostgreSQL+database
select table_name,n_live_tup, pg_size_pretty(pg_relation_size(table_name))
from information_schema.tables
inner join pg_stat_user_tables on table_name=relname
where table_schema = 'public'
order by 2 desc
Eine andere Alternative
Ich musste herausfinden, welche Tabellen den meisten Platz beanspruchen.
Basierend auf anderen Antworten habe ich diese Abfrage verwendet:
select table_name, pg_size_pretty( pg_relation_size(quote_ident(table_name)) )
from information_schema.tables
where table_schema = 'public'
order by pg_relation_size(quote_ident(table_name)) desc
Ich erhalte folgendes Ergebnis:
table_name pg_size_pretty
--------------------------------------
trade_binance 96 GB
closs_v2_binance_stash 46 GB
closs_bitfinex_stash 5725 MB
trade_bitfinex 5112 MB
...
api_requests 0 bytes
trade_huobi 0 bytes
Ich hätte eine größere SSD kaufen sollen.
select uv.a tablename, pg_size_pretty(uv.b) sizepretty
from (select tb.tablename a, pg_table_size('schemaname.'||tb.tablename::text) b
from pg_tables tb
where tb.schemaname ilike 'schemaname'
order by 2 desc
) uv
\d+
werden Ihnen diese Informationen in einem einfachen Code angezeigt , obwohl sie unsortiert sind.