Postgres DB-Größenbefehl

323

Gibt es einen Befehl zum Ermitteln der gesamten Datenbankgröße in Postgres?

Ich kann die Größe einer bestimmten Datenbank mithilfe des folgenden Befehls ermitteln:

select pg_database_size('databaseName');
Schöner Geist
quelle
1
Was ist ihre Einheit? Ist es in Bytes?
Abel Callejo
Es sind Bytes. :-)
john16384

Antworten:

365

Und ... Wenn Sie nicht eine ganze Abfrage eingeben möchten, können Sie auch ...

\l+ <database_name>

und Sie erhalten einige Details zur Datenbank, einschließlich der Größe der Datenbank.

Und ... um die Größe aller Datenbanken zu ermitteln.

Sie können einfach eingeben ...

\l+

Möglicherweise müssen Sie in die Eingabeaufforderung postgresql gehen, um mit diesen postgresql-Hilfsbefehlen abzufragen.

Überprüfen Sie andere postgresql-Hilfsbefehle durch Eingabe

\?

an der postgresql-Eingabeaufforderung.

Ashish
quelle
192

Sie können die Namen aller Datenbanken, mit denen Sie eine Verbindung herstellen können, aus der Systemtabelle "pg_datbase" abrufen. Wenden Sie die Funktion einfach wie unten beschrieben auf die Namen an.

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;

Wenn Sie beabsichtigen, dass die Ausgabe von einer Maschine anstelle eines Menschen verwendet wird, können Sie die Funktion pg_size_pretty () deaktivieren.

Mike Sherrill 'Cat Recall'
quelle
Manchmal enthält die Datenbank auch Indizes. Es hat einen gewissen Speicherwert. Ich suche nach einem Befehl, der die Größe der gesamten Datenbank angibt.
Schöner Geist
11
@ user2151087: pg_database_size() enthält die Größen für Indizes
a_horse_with_no_name
Falls sich jemand wundert, bietet diese Abfrage genau die gleichen Werte wie \l+. Das Ausgabeformat ist jedoch leichter zu lesen (weniger Spalten). Kompromiss zwischen Schreibbarkeit und Lesbarkeit…
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
quelle
5
Wie unterscheidet sich diese Antwort von der von Mike?
a_horse_with_no_name
3
Für die Zukunft, die ich und andere hier landen, erspare ich Ihnen die Mühe: Diese ist kürzer und für benannte Datenbanken / Tabellen, wobei Mikes für alle Datenbanken auf dem Server ist, von denen letztere die ursprüngliche Frage besser beantworten.
James Brown
78

Basierend auf der Antwort hier von @Hendy Irawan

Datenbankgrößen anzeigen:

\l+

z.B

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

Tischgrößen anzeigen:

\d+

z.B

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

Funktioniert nur in psql.

Owyongsk
quelle
1
Für mich nur \d+ *gearbeitet, einfach \d+zurückgekehrtDid not find any relations.
phil pirozhkov
1
@philpirozhkov Stellen Sie zuerst eine Verbindung zu einer Datenbank her ( \c dbname) und dann \d+.
Chappjc
Ist das eine Nummer eins oder ein Kleinbuchstabe L?
Dman
28

Ja, es gibt einen Befehl zum Ermitteln der Größe einer Datenbank in Postgres. Es ist das Folgende:

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
quelle
3
Die Reihenfolge ist in dieser Funktion falsch. Es kann keinen Unterschied zwischen lesbaren Formaten erkennen. Beispielsweise steht eine Datenbank mit einer Größe von 7151 KB vor einer Datenbank mit einer Größe von 7 GB.
Onnimonni
Behoben: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
Ich denke, Sie brauchen die "rohe" Größe nur zum Sortieren. Ich habe dies anstelle einer Unterabfrage verwendet 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'));

Gibt Ihnen die Gesamtgröße einer bestimmten Datenbank, aber ich glaube nicht, dass Sie alle Datenbanken innerhalb eines Servers ausführen können.

Wie auch immer Sie dies tun könnten ...

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
quelle
Warum kann es nicht eine einzelne Abfrage von pg_databasediesem abscheulichen pl / pgsql sein?
MozenRath
12

Aus dem PostgreSQL-Wiki .


HINWEIS: Datenbanken, zu denen der Benutzer keine Verbindung herstellen kann, werden so sortiert, als wären sie unendlich groß.

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

Die Seite enthält auch Ausschnitte zum Ermitteln der Größe Ihrer größten Beziehungen und größten Tabellen.

GollyJer
quelle
4

Sie können die folgende Abfrage verwenden, um die Größe aller Datenbanken von PostgreSQL zu ermitteln.

Die Referenz stammt aus diesem Blog.

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
quelle
3

Starten Sie pgAdmin, stellen Sie eine Verbindung zum Server her, klicken Sie auf den Datenbanknamen und wählen Sie die Registerkarte Statistik. Sie sehen die Größe der Datenbank am Ende der Liste.

Wenn Sie dann auf eine andere Datenbank klicken, bleibt diese auf der Registerkarte Statistik, sodass Sie ohne großen Aufwand problemlos viele Datenbankgrößen anzeigen können. Wenn Sie die Tabellenliste öffnen, werden alle Tabellen und ihre Größen angezeigt.

SPRBRN
quelle
1
Wenn Sie auf den DatabasesBaumknoten klicken (an eine DB-Verbindung angehängt) und die StatisticsRegisterkarte auswählen , wird eine schöne Zusammenfassung aller Datenbanken und ihrer Größen angezeigt (dritte Spalte).
Zloster
2
du -k /var/lib/postgresql/ |sort -n |tail
Jon Carnes
quelle
2
Vielleicht möchten Sie mehr Kontext über die Annahmen hinzufügen, die dies macht, wo die Datenbank ihre Daten speichert, wie die Ausgabe davon aussehen wird usw.
fzzfzzfzz
3
Dies ist zwar eine genaue Antwort, es wird jedoch empfohlen, einige Erklärungen beizufügen.
Sniperd
Der richtige Befehl unter CentOS lautet: du -k /var/lib/pgsql/ | sort -n | tail
Feriman