La otra vez, por un requerimiento del trabajo, tenia que pasar en un informe el tamaño de una Base de datos de _PostgreSQL_ de un sistema interno que estoy manteniendo.
Nunca me había puesto a pensar, pero _PostgreSQL_ no es como otras bases de datos (como _Firebird_) que tienen un archivo único por cada base de datos, sino que maneja las DB de una manera interna.
No voy a emitir juicio de valor sobre las ventajas y desventajas de una u otra forma, lo que era claro que para lo que tenia que obtener, la cosa no iba a ser tan fácil.
O eso creía. La cuestión esta resuelta en “esta pagina”:http://www.summersault.com/community/weblog/2005/10/25/reporting-on-disk-space-usage-for-postgresql-and-mysql-databases.html y el _script_ es el siguiente:
bc. SELECT pg_database.datname,
pg_shadow.usename AS owner,
pg_database_size(pg_database.datname) AS size,
pg_size_pretty(pg_database_size(pg_database.datname)) AS pretty_size
FROM pg_database
JOIN pg_shadow ON pg_database.datdba = pg_shadow.usesysid;
Obtenemos así un listado donde la primer columna contiene el nombre de cada DB y la ultima columna nos da el tamaño en Bytes de dicha DB.
Resta comentar que es necesario ser administrador de _PostgreSQL_ para ejecutar el _script_, o que nuestro usuario tenga permiso de lectura sobre la tabla *pg_shadow*.