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

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.


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


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

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.


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;

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

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.


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;

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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.