Bagaimana cara mendaftar semua tabel database PostgreSQL dan mengurutkannya berdasarkan ukurannya ?
Bagaimana cara mendaftar semua tabel database PostgreSQL dan mengurutkannya berdasarkan ukurannya ?
Jawaban:
select table_name, pg_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'public'
order by 2
Ini menunjukkan kepada Anda ukuran semua tabel di skema public
jika Anda memiliki beberapa skema, Anda mungkin ingin menggunakan:
select table_schema, table_name, pg_relation_size('"'||table_schema||'"."'||table_name||'"')
from information_schema.tables
order by 3
Contoh SQLFiddle: http://sqlfiddle.com/#!15/13157/3
Daftar semua fungsi ukuran objek di manual .
select table_schema, table_name, pg_relation_size(table_schema||'.'||table_name) from information_schema.tables order by 3;
terima kasih atas bantuannya!
select * from information_schema.tables where table_schema = 'public';
menghasilkan nol baris meskipun \dn
menunjukkan skema publik. Mungkin perubahan 9,5 menyebabkan ini?
Ini akan menunjukkan kepada Anda nama skema, nama tabel, ukuran cantik dan ukuran (diperlukan untuk pengurutan).
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;
Saya membangun ini berdasarkan solusi dari daftar skema dengan ukuran (relatif dan absolut) di database PostgreSQL di sini
Ini akan lebih jelas.
pg_size_pretty(<numeric_value>)
- mengubah jumlah byte ke format yang dapat dibaca manusia.
pg_database_size(<db_name>)
- mendapat ukuran database dalam byte .
pg_total_relation_size(<relation_name>)
- mendapatkan ukuran total tabel dan indeksnya dalam byte .
pg_relation_size(<relation_name>)
- mendapat ukuran hubungan (tabel / indeks) dalam byte .
pg_index_size(<relation_name>)
- mendapat ukuran indeks dari relasi dalam byte .
current_database()
- mendapatkan database yang sedang digunakan untuk menjalankan kueri ini.
Pertanyaan:
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;
Hasil:
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
Format manusiawi yang mewakili dalam bytes
, kB
, MB
, GB
, danTB
.
bytes
untuk kB
- dimulai dari10240 bytes
bytes
ke MB
- dimulai dari 10485248 bytes
=10239.5 kB
~10 MB
bytes
ke GB
- dimulai dari 10736893952 bytes
=10239.5 MB
~10 BG
bytes
ke TB
- dimulai dari 10994579406848 bytes
=10239.5 GB
~10 TB
Semua konversi unit dimulai dari 10 + <unit>
.
Untuk referensi - Dokumentasi Resmi 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;
diambil dari sini 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
Alternatif lain
Saya perlu menemukan tabel mana yang paling banyak menggunakan ruang.
Berdasarkan jawaban lain, saya menggunakan kueri itu:
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
Saya mendapatkan hasil sebagai berikut:
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
Saya seharusnya membeli SSD yang lebih besar.
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+
akan menampilkan informasi ini, meskipun tidak disortir.