Postgres DB Size命令

Bea*_*ind 294 sql postgresql postgresql-9.2

是否有任何命令可以在Postgres中找到所有数据库大小?

我可以使用以下命令找到特定数据库的大小:

select pg_database_size('databaseName');
Run Code Online (Sandbox Code Playgroud)

Ash*_*ish 334

并且......如果您可能不想输入整个查询...您也可以输入...

\l+ <database_name>
Run Code Online (Sandbox Code Playgroud)

您将获得有关数据库的一些详细信息,包括数据库的大小.

并且...获取所有数据库的大小.

你可以输入......

\l+
Run Code Online (Sandbox Code Playgroud)

您可能需要进入postgresql命令提示符以使用这些postgresql帮助程序命令进行查询.

键入以检查其他postgresql帮助程序命令

\?
Run Code Online (Sandbox Code Playgroud)

在postgresql命令提示符下.

  • 也可以使用psql -c“ \ l +”从CLI运行单个命令 (2认同)

Mik*_*ll' 175

您可以从"pg_datbase"系统表中获取可以连接到的所有数据库的名称.只需将函数应用于名称,如下所示.

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;
Run Code Online (Sandbox Code Playgroud)

如果您希望输出由机器而不是人类使用,则可以剪切pg_size_pretty()函数.

  • @ user2151087:`pg_database_size()`*包括*索引的大小 (10认同)
  • 如果有人想知道,此查询提供与“\l+”完全相同的值。不过,输出格式更易于阅读(更少的列)。可写性和可读性之间的权衡... (2认同)

小智 146

-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));
Run Code Online (Sandbox Code Playgroud)

  • 这个答案与迈克的答案有什么不同? (5认同)
  • 为了将来我和其他人落在这里,我为您省去了麻烦:这一个较短,适用于命名数据​​库/表,其中[Mike's(/sf/answers/1323503191/])适用于所有数据库在服务器上,后者可以更好地回答原始问题。 (2认同)
  • 问题是“查找*所有*数据库的大小的命令是什么?” (2认同)

owy*_*gsk 70

基于答案在这里通过@Hendy Irawan

显示数据库大小:

\l+

例如

=> \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 | 
Run Code Online (Sandbox Code Playgroud)

显示表格大小:

\d+

例如

=> \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 
Run Code Online (Sandbox Code Playgroud)

只适用于psql.

  • @philpirozhkov 首先连接到数据库(`\c dbname`),然后执行`\d+`。 (5认同)
  • 对我来说,只有“\d+ *”有效,普通的“\d+”返回“没有找到任何关系”。 (2认同)

小智 25

是的,有一个命令可以在Postgres中找到数据库的大小.它是以下内容:

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;
Run Code Online (Sandbox Code Playgroud)

  • 此功能的排序错误.它无法区分人类可读格式.例如,大小为7151 KB的数据库位于大小为7 GB的数据库之前. (3认同)
  • 我认为你只需要“原始”大小来排序。我使用这个而不是子查询`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;`。 (2认同)

小智 16

SELECT pg_size_pretty(pg_database_size('database of database'));

将为您提供特定数据库的总大小,但我不认为您可以在服务器中执行所有数据库.

但是你可以这样做......

SELECT pg_size_pretty(pg_database_size('name of database'));
Run Code Online (Sandbox Code Playgroud)

  • 为什么它不能是来自“pg_database”的单个查询,而不是这个可怕的 pl/pgsql? (3认同)

Gol*_*Jer 11

来自PostgreSQL wiki.


用户无法连接的数据库按其无限大小排序.

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
Run Code Online (Sandbox Code Playgroud)

该页面还包含用于查找最大关系和最大表格大小的片段.


SPR*_*BRN 7

启动 pgAdmin,连接到服务器,点击数据库名称,然后选择统计选项卡。您将在列表底部看到数据库的大小。

然后,如果您单击另一个数据库,它会停留在统计选项卡上,因此您可以轻松查看许多数据库大小。如果您打开表格列表,它会显示所有表格及其大小。

  • 如果您单击“数据库”树节点(附加到数据库连接)并选择“统计”选项卡,您将看到所有数据库及其大小的很好的摘要(第三列)。 (2认同)
  • 当人们想知道表的大小时,同样的技术也适用。从今天(2023 年)起和 pgAdmin 4 上也有效 (2认同)

Anv*_*esh 5

您可以使用以下查询来查找 PostgreSQL 所有数据库的大小。

参考资料取自此博客。

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;
Run Code Online (Sandbox Code Playgroud)