Postgres DB Size Command


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.


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 ().


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'));

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.


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;

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;
$$

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.


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;

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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.