Polecenie Postgres DB Size

324

Czy jest jakieś polecenie, aby znaleźć wszystkie bazy danych w Postgres?

Jestem w stanie znaleźć rozmiar konkretnej bazy danych za pomocą następującego polecenia:

select pg_database_size('databaseName');
Piękny umysł
źródło
1
Jaka jest jego jednostka? Czy to jest w bajtach?
Abel Callejo
To bajty. :-)
john16384

Odpowiedzi:

365

I ... Jeśli nie chcesz wpisywać całego zapytania ... możesz także wpisać ...

\l+ <database_name>

a otrzymasz szczegółowe informacje na temat bazy danych, w tym rozmiar bazy danych.

I ... Aby uzyskać rozmiary wszystkich baz danych.

możesz po prostu wpisać ...

\l+

Może być konieczne przejście do wiersza polecenia postgresql w celu wykonania zapytania za pomocą poleceń pomocniczych postgresql.

Sprawdź inne polecenia pomocnika postgresql, wpisując

\?

w wierszu polecenia postgresql.

Ashish
źródło
193

Nazwy wszystkich baz danych, z którymi można się połączyć, można uzyskać z tabeli systemowej „pg_datbase”. Po prostu zastosuj funkcję do nazw, jak poniżej.

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;

Jeśli chcesz, aby dane wyjściowe były konsumowane przez maszynę zamiast człowieka, możesz wyciąć funkcję pg_size_pretty ().

Mike Sherrill „Cat Recall”
źródło
Czasami baza danych zawiera również indeksy. Ma pewną wartość pamięci. Szukam jednego polecenia, które zapewni rozmiar całej bazy danych.
Beautiful Mind
11
@ user2151087: pg_database_size() obejmuje rozmiary indeksów
a_horse_w_no_name
Na wypadek, gdyby ktoś się zastanawiał, zapytanie to zawiera dokładnie takie same wartości jak \l+. Format wyjściowy jest jednak łatwiejszy do odczytania (mniej kolumn). Kompromis między zapisywalnością a czytelnością…
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
źródło
5
Czym różni się ta odpowiedź od Mike'a?
a_horse_w_no_name
3
Dla przyszłego mnie i innych, którzy tu wylądują, oszczędzę ci kłopotu: ten jest krótszy i dotyczy nazwanej bazy danych / tabeli, w której Mike's jest dla wszystkich baz danych na serwerze, na które ta druga odpowiada lepiej na pierwotne pytanie.
James Brown
78

Na podstawie odpowiedzi tutaj przez @Hendy Irawan

Pokaż rozmiary bazy danych:

\l+

na przykład

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

Pokaż rozmiary stołów:

\d+

na przykład

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

Działa tylko w psql.

owyongsk
źródło
1
Dla mnie tylko \d+ *działało, zwykły \d+wróciłDid not find any relations.
phil pirozhkov
1
@philpirozhkov Najpierw połącz się z bazą danych ( \c dbname), a następnie zrób \d+.
chappjc
Czy to numer jeden czy mała litera L?
dman
28

Tak, w Postgres istnieje polecenie znalezienia rozmiaru bazy danych. To jest następujące:

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
źródło
3
W tej funkcji kolejność jest nieprawidłowa. Nie potrafi odróżnić formatów czytelnych dla człowieka. Na przykład baza danych o rozmiarze 7151 KB występuje przed bazą danych o rozmiarze 7 GB.
onnimonni
Naprawiono: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
Myślę, że potrzebujesz „surowego” rozmiaru tylko do sortowania. Użyłem tego zamiast pod-zapytania 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'));

Podaje całkowity rozmiar konkretnej bazy danych, jednak nie sądzę, że można wykonać wszystkie bazy danych na serwerze.

Jednak możesz to zrobić ...

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
źródło
dlaczego nie może to być jedno zapytanie pg_databasezamiast tego ohydnego pl / pgsql?
MozenRath
12

Z wiki PostgreSQL .


UWAGA: Bazy danych, z którymi użytkownik nie może się połączyć, są sortowane tak, jakby miały nieskończony rozmiar.

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

Strona zawiera także fragmenty pozwalające znaleźć rozmiar twoich największych relacji i największych tabel.

GollyJer
źródło
4

Możesz użyć poniższego zapytania, aby znaleźć rozmiar wszystkich baz danych PostgreSQL.

Referencje pochodzą z tego bloga.

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;
Anvesh
źródło
3

Uruchom pgAdmin, połącz się z serwerem, kliknij nazwę bazy danych i wybierz kartę statystyk. Rozmiar bazy danych zobaczysz u dołu listy.

Następnie, jeśli klikniesz inną bazę danych, pozostanie ona na karcie statystyk, dzięki czemu możesz łatwo zobaczyć wiele rozmiarów bazy danych bez większego wysiłku. Jeśli otworzysz listę tabel, zobaczysz wszystkie tabele i ich rozmiary.

SPRBRN
źródło
1
A jeśli klikniesz Databaseswęzeł drzewa (podłączony do połączenia Statisticsz bazą danych ) i wybierzesz kartę, zostanie wyświetlone ładne podsumowanie wszystkich baz danych i ich rozmiarów (trzecia kolumna).
zloster
2
du -k /var/lib/postgresql/ |sort -n |tail
Jon Carnes
źródło
2
Możesz dodać więcej kontekstu na temat założeń, które powodują, że baza danych przechowuje swoje dane, jak będą wyglądały dane wyjściowe itp.
fzzfzzfzz
3
Chociaż może to być dokładna odpowiedź, najlepszą praktyką jest podanie wyjaśnienia.
sniperd
Prawidłowe polecenie w CentOS jest następujące: du -k /var/lib/pgsql/ | sort -n | tail
Feriman