Comando Postgres DB Size

324

¿Hay algún comando para encontrar el tamaño de todas las bases de datos en Postgres?

Puedo encontrar el tamaño de una base de datos específica usando el siguiente comando:

select pg_database_size('databaseName');
Mente hermosa
fuente
1
¿Cuál es su unidad? ¿Está en bytes?
Abel Callejo
Es bytes. :-)
john16384

Respuestas:

365

Y ... Si en caso de que no desee escribir una consulta completa ... también puede escribir ...

\l+ <database_name>

y obtendrá algunos detalles sobre la base de datos, incluido el tamaño de la base de datos.

Y ... Para obtener tamaños de todas las bases de datos.

solo puedes escribir ...

\l+

Puede que tenga que ir al símbolo del sistema postgresql para consultar con estos comandos auxiliares postgresql.

Verifique otros comandos de ayuda postgresql escribiendo

\?

en el símbolo del sistema postgresql.

Ashish
fuente
193

Puede obtener los nombres de todas las bases de datos a las que puede conectarse desde la tabla del sistema "pg_datbase". Simplemente aplique la función a los nombres, como se muestra a continuación.

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;

Si tiene la intención de que la salida sea consumida por una máquina en lugar de un humano, puede cortar la función pg_size_pretty ().

Mike Sherrill 'Retiro del gato'
fuente
A veces, la base de datos contiene índices también. Tiene algún valor de almacenamiento. Estoy buscando un comando que proporcione el tamaño de la base de datos completa.
Beautiful Mind
11
@ user2151087: pg_database_size() incluye los tamaños para los índices
a_horse_with_no_name
En caso de que alguien se lo preguntara, esta consulta proporciona exactamente los mismos valores que \l+. Sin embargo, el formato de salida es más fácil de leer (menos columnas). Compensación entre escritura y legibilidad ...
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
fuente
55
¿Cómo es esa respuesta diferente a la de Mike?
a_horse_with_no_name
3
Para el futuro para mí y para otros que lleguen aquí, le ahorraré el problema: este es más corto y para la base de datos / tabla nombrada donde Mike es para todas las bases de datos en el servidor de las cuales esta última responde mejor a la pregunta original.
James Brown
78

Basado en la respuesta aquí por @Hendy Irawan

Mostrar tamaños de base de datos:

\l+

p.ej

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

Mostrar tamaños de mesa:

\d+

p.ej

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

Solo funciona en psql.

Owyongsk
fuente
1
Para mí, solo \d+ *funcionó, simplemente \d+regresóDid not find any relations.
phil pirozhkov
1
@philpirozhkov Conéctese primero a una base de datos ( \c dbname), luego hágalo \d+.
chappjc
¿Es ese un número uno o una L minúscula?
dman
28

Sí, hay un comando para encontrar el tamaño de una base de datos en Postgres. Es lo siguiente:

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
fuente
3
El orden es incorrecto en esta función. No puede notar la diferencia entre los formatos legibles por humanos. Por ejemplo, la base de datos de tamaño 7151 KB viene antes que la base de datos de tamaño 7 GB.
onnimonni
Corregido: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
Creo que necesita el tamaño "en bruto" para ordenar solamente. Usé esto en lugar de una subconsulta 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'));

Le dará el tamaño total de una base de datos en particular, sin embargo, no creo que pueda hacer todas las bases de datos dentro de un servidor.

Sin embargo, podrías hacer esto ...

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
fuente
¿Por qué no puede ser una única consulta en pg_databaselugar de este horrible pl / pgsql?
MozenRath 01 de
12

Del wiki de PostgreSQL .


NOTA: Las bases de datos a las que el usuario no puede conectarse se ordenan como si tuvieran un tamaño infinito.

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 página también tiene fragmentos para encontrar el tamaño de sus relaciones más grandes y tablas más grandes.

GollyJer
fuente
4

Puede usar la consulta a continuación para encontrar el tamaño de todas las bases de datos de PostgreSQL.

Se toma referencia de este 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
fuente
3

Inicie pgAdmin, conéctese al servidor, haga clic en el nombre de la base de datos y seleccione la pestaña de estadísticas. Verá el tamaño de la base de datos al final de la lista.

Luego, si hace clic en otra base de datos, permanece en la pestaña de estadísticas para que pueda ver fácilmente muchos tamaños de bases de datos sin mucho esfuerzo. Si abre la lista de tablas, muestra todas las tablas y sus tamaños.

SPRBRN
fuente
1
Y si hace clic en el Databasesnodo del árbol (adjunto a una conexión de base de datos) y selecciona la Statisticspestaña, se le presentará un resumen agradable de todas las bases de datos y sus tamaños (tercera columna).
zloster
2
du -k /var/lib/postgresql/ |sort -n |tail
Jon Carnes
fuente
2
Es posible que desee añadir más contexto sobre los supuestos Esto hace re, donde la base de datos es almacenar sus datos, lo que la salida de este se verá así, etc.
fzzfzzfzz
3
Si bien esta podría ser una respuesta precisa, es una buena práctica incluir alguna explicación.
francotirador
El comando correcto en CentOS es este: du -k /var/lib/pgsql/ | sort -n | tail
Feriman