Search code examples
sqldatabasepostgresqlsizediskspace

Is it possible to get database name and size for all databases in my PostgreSQL database server?


I have a PostgreSQL database server with multiple databases. I would like to select name, size for each database, like this:

| name |   size   |
-------------------
| db_1 | 21115439 |
| db_2 | 34238574 |
| db_3 | 83859902 |
| db_4 | 18447618 |

I know how to get one specific database size SELECT pg_database_size('db_1'), but is there any way to get multiple databases?


Solution

  • According to this site https://wiki.postgresql.org/wiki/Disk_Usage ;

    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