Comando dimensioni DB Postgres


324

Esiste un comando per trovare tutte le dimensioni dei database in Postgres?

Sono in grado di trovare la dimensione di un database specifico utilizzando il seguente comando:

select pg_database_size('databaseName');

1
Qual è la sua unità però? È in byte?
Abel Callejo,

Sono byte. :-)
john16384,

Risposte:


365

E ... Se nel caso in cui non desideri digitare un'intera query ... puoi anche digitare ...

\l+ <database_name>

e otterrai alcuni dettagli sul database, inclusa la dimensione del database.

E ... Per ottenere dimensioni di tutti i database.

puoi semplicemente digitare ...

\l+

Potrebbe essere necessario accedere al prompt dei comandi postgresql per eseguire query con questi comandi helper postgresql.

Controlla altri comandi helper postgresql digitando

\?

al prompt dei comandi postgresql.


193

È possibile ottenere i nomi di tutti i database a cui è possibile connettersi dalla tabella di sistema "pg_datbase". Basta applicare la funzione ai nomi, come di seguito.

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;

Se intendi che l'output venga consumato da una macchina anziché da un essere umano, puoi tagliare la funzione pg_size_pretty ().


A volte il database contiene anche indici. Ha un certo valore di archiviazione. Sto cercando un comando che fornirà le dimensioni del database completo.
Beautiful Mind,

11
@ user2151087: pg_database_size() include le dimensioni per gli indici
a_horse_with_no_name

Nel caso qualcuno si stesse chiedendo, questa query fornisce esattamente gli stessi valori di \l+. Il formato di output è tuttavia più facile da leggere (meno colonne). Un compromesso tra scrivibilità e leggibilità ...
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
In che modo questa risposta è diversa da quella di Mike?
a_horse_with_no_name

3
Per il futuro io e gli altri che atterreremo qui, ti risparmierò il problema: questo è più corto e per il database / tabella denominato dove Mike è per tutti i database sul server di cui quest'ultimo risponde meglio alla domanda originale.
James Brown,

78

Sulla base della risposta qui di @Hendy Irawan

Mostra dimensioni database:

\l+

per esempio

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

Mostra dimensioni tavolo:

\d+

per esempio

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

Funziona solo in psql.


1
Per me, ha \d+ *funzionato solo , è \d+tornato semplicementeDid not find any relations.
phil pirozhkov

1
@philpirozhkov Collegati prima a un database ( \c dbname), quindi esegui \d+.
Chappjc,

È un numero uno o una L minuscola?
Dman

28

Sì, esiste un comando per trovare la dimensione di un database in Postgres. È il seguente:

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
L'ordinamento è errato in questa funzione. Non può dire la differenza tra formati leggibili dall'uomo. Ad esempio un database di dimensioni 7151 KB precede un database di dimensioni 7 GB.
onnimonni,

Risolto: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
Penso che tu abbia bisogno della dimensione "grezza" solo per l'ordinamento. Ho usato questo invece di una sottoquery 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'));

Ti darà la dimensione totale di un determinato database, tuttavia non credo che tu possa fare tutti i database all'interno di un server.

Comunque potresti farlo ...

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

perché non può essere una singola query pg_databasepiuttosto che questo orribile pl / pgsql?
MozenRath,

12

Dal wiki PostgreSQL .


NOTA: i database a cui l'utente non può connettersi sono ordinati come se avessero dimensioni infinite.

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

La pagina contiene anche frammenti per trovare la dimensione delle relazioni più grandi e delle tabelle più grandi.


4

È possibile utilizzare la query seguente per trovare la dimensione di tutti i database di PostgreSQL.

Il riferimento è tratto da questo 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;

3

Avviare pgAdmin, connettersi al server, fare clic sul nome del database e selezionare la scheda delle statistiche. Vedrai le dimensioni del database in fondo all'elenco.

Quindi, se fai clic su un altro database, rimane nella scheda delle statistiche in modo da poter vedere facilmente molte dimensioni del database senza troppi sforzi. Se si apre l'elenco delle tabelle, vengono visualizzate tutte le tabelle e le relative dimensioni.


1
E se fai clic sul Databasesnodo dell'albero (collegato a una connessione DB) e selezioni la Statisticsscheda, ti verrà presentato un bel riepilogo di tutti i database e delle loro dimensioni (terza colonna).
zloster,

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

2
Potresti voler aggiungere più contesto alle ipotesi che questo porta a dove il database sta memorizzando i suoi dati, come sarà l'output di questo, ecc.
fzzfzzfzz

3
Anche se questa potrebbe essere una risposta accurata, è consigliabile includere alcune spiegazioni.
cecchino

Il comando corretto su CentOS è questo: du -k /var/lib/pgsql/ | sort -n | tail
Feriman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.