Postgres DB Boyut Komutu


324

Postgres'te tüm veritabanlarının boyutunu bulmak için herhangi bir komut var mı?

Aşağıdaki komutu kullanarak belirli bir veritabanının boyutunu bulmak mümkün:

select pg_database_size('databaseName');

1
Birimi ne? Bayt cinsinden mi?
Abel Callejo

Bayttır. :-)
john16384

Yanıtlar:


365

Ve ... Eğer tam bir sorgu yazmak istemeyecekseniz ... ayrıca yazabilirsiniz ...

\l+ <database_name>

ve veritabanının boyutu da dahil olmak üzere veritabanı hakkında bazı ayrıntılar alırsınız.

Ve ... Tüm veritabanlarının boyutlarını elde etmek için.

yazabilirsiniz ...

\l+

Bu postgresql yardımcı komutlarıyla sorgulamak için postgresql komut istemine gitmeniz gerekebilir.

Diğer postgresql yardımcı komutlarını yazarak kontrol edin

\?

postgresql komut isteminde.


193

Bağlanabileceğiniz tüm veritabanlarının adlarını "pg_datbase" sistem tablosundan alabilirsiniz. İşlevi aşağıdaki adlara uygulamanız yeterlidir.

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;

Çıktının bir insan yerine bir makine tarafından tüketilmesini istiyorsanız, pg_size_pretty () işlevini kesebilirsiniz.


Bazen veritabanı da dizinler içerir. Depolama değeri var. Ben tam bir veritabanı boyutu sağlayacak bir komut arıyorum.
Güzel Zihin

11
@ user2151087: dizinler için boyutlar pg_database_size() içerir
a_horse_with_no_name

Herhangi birinin merak etmesi durumunda, bu sorgu tam olarak aynı değerleri sağlar \l+. Çıktı formatının okunması daha kolaydır (daha az sütun).
Yazılabilirlik

158
-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));

5
Bu cevap Mike'ın cevabından nasıl farklı?
a_horse_with_no_name

3
Gelecekte ben ve diğerleri buraya iniş için, size sorundan kurtaracağım: Bu daha kısa ve Mike'ın sunucudaki ikincisinin orijinal soruyu daha iyi cevapladığı tüm veritabanları için olduğu adlandırılmış veritabanı / tablo için.
James Brown

78

Yanıta göre burada tarafından @Hendy Irawan

Veritabanı boyutlarını göster:

\l+

Örneğin

=> \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 | 

Tablo boyutlarını göster:

\d+

Örneğin

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

Yalnızca içinde çalışır psql.


1
Benim için sadece \d+ *çalıştı, sade \d+döndüDid not find any relations.
phil pirozhkov

1
@philpirozhkov Önce bir veritabanına bağlanın ( \c dbname), sonra yapın \d+.
chappjc

Bu bir numaralı mı yoksa küçük L mi?
dman

28

Evet, Postgres'te bir veritabanının boyutunu bulma komutu vardır. Bu şudur:

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
Bu işlevde sıralama yanlış. İnsan tarafından okunabilir formatlar arasındaki farkı söyleyemez. Örneğin, 7151 KB boyutundaki veritabanı 7 GB boyutundaki veritabanından önce gelir.
onnimonni

Düzeltildi: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
Bence sadece sıralama için "ham" boyuta ihtiyacınız var. Bunu bir alt sorgu yerine kullandım 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'));

Size belirli bir veritabanının toplam boyutunu verecektir ancak bir sunucu içindeki tüm veritabanlarını yapabileceğinizi düşünmüyorum.

Ancak bunu yapabilirsin ...

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

neden pg_databasebu iğrenç pl / pgsql yerine tek bir sorgu olamaz?
MozenRath

12

Gönderen PostgreSQL wiki .


NOT: Kullanıcının bağlanamadığı veritabanları sonsuz boyuttaymış gibi sıralanır.

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

Sayfa ayrıca en büyük ilişkilerinizin ve en büyük tablolarınızın boyutunu bulmak için snippet'lere sahiptir.


4

PostgreSQL'in tüm veritabanlarının boyutunu bulmak için aşağıdaki sorguyu kullanabilirsiniz.

Bu blogdan referans alınmıştır.

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

PgAdmin'i başlatın, sunucuya bağlanın, veritabanı adını tıklayın ve istatistik sekmesini seçin. Listenin altında veritabanının boyutunu göreceksiniz.

Daha sonra başka bir veritabanına tıklarsanız, çok fazla çaba harcamadan birçok veritabanı boyutunu kolayca görebilmeniz için istatistikler sekmesinde kalır. Tablo listesini açarsanız, tüm tabloları ve boyutlarını gösterir.


1
Ve Databasesağaç düğümünü tıklarsanız (bir DB bağlantısına eklenir) ve Statisticssekmeyi seçerseniz, tüm Veritabanları ve boyutlarının güzel bir özeti sunulur (üçüncü sütun).
zloster

2
du -k /var/lib/postgresql/ |sort -n |tail

2
Bu, veritabanının verilerini depoladığı yerde yaptığı varsayımlar, bunun çıktısının nasıl görüneceği vb. Hakkında daha fazla bağlam eklemek isteyebilirsiniz.
fzzfzzfzz

3
Bu doğru bir cevap olsa da, bazı açıklamalar eklemek en iyi uygulamadır.
keskin nişancı

du -k /var/lib/pgsql/ | sort -n | tail
CentOS'taki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.