Postgres DB Size Command

324

Apakah ada perintah untuk menemukan semua ukuran database di Postgres?

Saya dapat menemukan ukuran database tertentu dengan menggunakan perintah berikut:

select pg_database_size('databaseName');
Pemikiran yang indah
sumber
1
Apa unitnya? Apakah dalam byte?
Abel Callejo
Ini adalah byte. :-)
john16384

Jawaban:

365

Dan ... Jika seandainya Anda tidak ingin mengetikkan seluruh permintaan ... Anda juga dapat mengetik ...

\l+ <database_name>

dan Anda akan mendapatkan beberapa detail tentang basis data, termasuk ukuran basis data.

Dan ... Untuk mendapatkan ukuran semua basis data.

Anda cukup mengetik ...

\l+

Anda mungkin perlu masuk ke command prompt postgresql untuk melakukan query dengan perintah pembantu postgresql ini.

Periksa perintah pembantu postgresql lainnya dengan mengetik

\?

di prompt perintah postgresql.

Ashish
sumber
193

Anda bisa mendapatkan nama semua basis data yang bisa Anda sambungkan dari tabel sistem "pg_datbase". Cukup terapkan fungsi ke nama-nama, seperti di bawah ini.

select t1.datname AS db_name,  
       pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
order by pg_database_size(t1.datname) desc;

Jika Anda ingin output dikonsumsi oleh mesin alih-alih manusia, Anda dapat memotong fungsi pg_size_pretty ().

Mike Sherrill 'Cat Recall'
sumber
Terkadang basis data juga memuat indeks. Ini memiliki beberapa nilai penyimpanan. Saya mencari satu perintah yang akan memberikan ukuran database lengkap.
Beautiful Mind
11
@ user2151087: pg_database_size() termasuk ukuran untuk indeks
a_horse_with_no_name
Jika ada yang bertanya-tanya, permintaan ini memberikan nilai yang persis sama dengan \l+. Format output lebih mudah dibaca, (kurang kolom). Pertukaran antara kemampuan menulis dan keterbacaan ...
Skippy le Grand Gourou
158
-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));
Srinivasreddy Jakkireddy
sumber
5
Bagaimana jawaban itu berbeda dengan jawaban Mike?
a_horse_with_no_name
3
Untuk masa depan saya dan orang lain yang mendarat di sini, saya akan menyelamatkan Anda dari masalahnya: Yang ini lebih pendek dan untuk nama database / tabel di mana Mike adalah untuk semua database di server yang mana yang terakhir menjawab lebih baik pertanyaan awal.
James Brown
78

Berdasarkan jawaban di sini oleh @Hendy Irawan

Tampilkan ukuran basis data:

\l+

misalnya

=> \l+
 berbatik_prd_commerce    | berbatik_prd     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 19 MB   | pg_default | 
 berbatik_stg_commerce    | berbatik_stg     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8633 kB | pg_default | 
 bursasajadah_prd         | bursasajadah_prd | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1122 MB | pg_default | 

Tampilkan ukuran tabel:

\d+

misalnya

=> \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 

Hanya bekerja di psql.

owyongsk
sumber
1
Bagi saya, hanya \d+ *bekerja, polos \d+kembaliDid not find any relations.
phil pirozhkov
1
@ philpirozhkov Sambungkan ke database terlebih dahulu ( \c dbname), lalu lakukan \d+.
chappjc
Apakah itu nomor satu atau huruf kecil L?
dman
28

Ya, ada perintah untuk menemukan ukuran database di Postgres. Berikut ini:

SELECT pg_database.datname as "database_name", pg_size_pretty(pg_database_size(pg_database.datname)) AS size_in_mb FROM pg_database ORDER by size_in_mb DESC;
Anoop Sharma
sumber
3
Pemesanan salah dalam fungsi ini. Itu tidak bisa membedakan antara format yang dapat dibaca manusia. Misalnya basis data ukuran 7151 KB hadir sebelum basis data ukuran 7 GB.
onnimonni
Diperbaiki:SELECT database_name, pg_size_pretty(size) from (SELECT pg_database.datname as "database_name", pg_database_size(pg_database.datname) AS size FROM pg_database ORDER by size DESC) as ordered;
Michael
1
Saya pikir Anda memerlukan ukuran "mentah" untuk menyortir saja. Saya menggunakan ini alih-alih sub-permintaan SELECT pg_database.datname AS "DB Name", pg_size_pretty(pg_database_size(pg_database.datname)) AS "Size" FROM pg_database ORDER BY (pg_database_size(pg_database.datname)) DESC;.
M-Dahab
20
SELECT pg_size_pretty(pg_database_size('name of database'));

Akan memberi Anda ukuran total database tertentu namun saya tidak berpikir Anda bisa melakukan semua database dalam server.

Namun Anda bisa melakukan ini ...

DO
$$
DECLARE
r   RECORD;
db_size TEXT;
BEGIN
FOR r in
SELECT datname FROM pg_database
WHERE datistemplate = false
LOOP
db_size:= (SELECT pg_size_pretty(pg_database_size(r.datname)));

RAISE NOTICE 'Database:% , Size:%', r.datname , db_size;

END LOOP;
END;
$$
Shaun McCready
sumber
mengapa itu tidak bisa menjadi satu permintaan dari pg_databasebukan pl / pgsql yang mengerikan ini?
MozenRath
12

Dari wiki PostgreSQL .


CATATAN: Basis data yang tidak dapat disambungkan pengguna diurutkan seolah-olah berukuran tak terbatas.

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS Size
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
    LIMIT 20

Halaman ini juga memiliki cuplikan untuk menemukan ukuran hubungan terbesar Anda dan tabel terbesar.

GollyJer
sumber
4

Anda dapat menggunakan kueri di bawah ini untuk menemukan ukuran semua database PostgreSQL.

Referensi diambil dari blog ini.

SELECT 
    datname AS DatabaseName
    ,pg_catalog.pg_get_userbyid(datdba) AS OwnerName
    ,CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(datname))
        ELSE 'No Access For You'
    END AS DatabaseSize
FROM pg_catalog.pg_database
ORDER BY 
    CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(datname)
        ELSE NULL
    END DESC;
Landasan
sumber
3

Mulai pgAdmin, sambungkan ke server, klik pada nama database, dan pilih tab statistik. Anda akan melihat ukuran database di bagian bawah daftar.

Kemudian jika Anda mengklik pada basis data lain, ia tetap pada tab statistik sehingga Anda dapat dengan mudah melihat banyak ukuran basis data tanpa banyak usaha. Jika Anda membuka daftar tabel, itu menunjukkan semua tabel dan ukurannya.

SPRBRN
sumber
1
Dan jika Anda mengklik Databasessimpul pohon (terlampir pada koneksi DB) dan pilih Statisticstab Anda akan disajikan ringkasan yang bagus dari semua Database dan ukurannya (kolom ketiga).
zloster
2
du -k /var/lib/postgresql/ |sort -n |tail
Jon Carnes
sumber
2
Anda mungkin ingin menambahkan lebih banyak konteks tentang asumsi ini membuat kembali di mana database menyimpan datanya, seperti apa output dari ini, dll.
fzzfzzfzz
3
Meskipun ini mungkin jawaban yang akurat, praktik terbaik adalah memasukkan beberapa penjelasan.
sniperd
Perintah yang benar pada CentOS adalah yang ini: du -k /var/lib/pgsql/ | sort -n | tail
Feriman