【问题标题】:Postgres DB Size CommandPostgres 数据库大小命令
【发布时间】:2013-09-25 06:25:48
【问题描述】:

查找所有个数据库大小的命令是什么?

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

select pg_database_size('databaseName');

【问题讨论】:

  • 它的单位是什么?是字节吗?
  • 它是字节。 :-)
  • 只是一个旁注:select pg_database_size('databaseName')/1024/1024; 为您提供更好的人类可读兆字节
  • @Markus 只是一个旁注:select pg_size_pretty(pg_database_size('databaseName')); 为您提供更好的人类可读尺寸,无论大小。 (TB里读MB有点难)

标签: sql postgresql postgresql-9.2


【解决方案1】:

您可以输入以下psql meta-command 以获取有关指定数据库的一些详细信息,包括其大小:

\l+ <database_name>

并获得所有个数据库的大小(您可以连接到的):

\l+

【讨论】:

  • 如果我只想知道一种模式大小?有没有办法通过使用this approach来做到这一点?
【解决方案2】:

您可以从“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;

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

【讨论】:

  • 有时数据库也包含索引。它具有一定的存储价值。我正在寻找一个可以提供完整数据库大小的命令。
  • @user2151087: pg_database_size() 包括索引的大小
  • 如果有人想知道,这个查询提供的值与\l+ 完全相同。不过,输出格式更容易阅读(列更少)。可写性和可读性之间的权衡……
【解决方案3】:
-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));

【讨论】:

  • 这个答案和 Mike 的有什么不同?
  • 为了将来我和其他人登陆这里,我会为你省去麻烦:这个更短,用于命名数据​​库/表,其中Mike's 用于服务器上的所有数据库,后者回答更好的原始问题。
【解决方案4】:

基于here@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 | 

显示表格大小:

\d+

例如

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

仅适用于psql

【讨论】:

  • 对我来说,只有\d+ * 有效,普通\d+ 返回Did not find any relations.
  • @philpirozhkov 先连接到数据库(\c dbname),然后再连接到数据库\d+
【解决方案5】:

是的,在 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;

【讨论】:

  • 此函数的排序错误。它无法区分人类可读格式。例如,大小为 7151 KB 的数据库位于大小为 7 GB 的数据库之前。
  • 固定: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;
  • 我认为您只需要“原始”大小进行排序。我用这个而不是子查询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;
【解决方案6】:
SELECT pg_size_pretty(pg_database_size('name of database'));

会给你一个特定数据库的总大小,但我认为你不能在一个服务器中处理所有数据库。

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

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

【讨论】:

  • 为什么不能是来自pg_database 的单个查询而不是这个可怕的 pl/pgsql?
【解决方案7】:

来自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

该页面还具有用于查找最大关系和最大表的大小的 sn-ps。

【讨论】:

    【解决方案8】:

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

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

    【讨论】:

    • 如果您单击Databases 树节点(附加到数据库连接)并选择Statistics 选项卡,您将看到所有数据库及其大小的漂亮摘要(第三列)。
    【解决方案9】:

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

    Reference is taken from this 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;
    

    【讨论】:

      【解决方案10】:
      du -k /var/lib/postgresql/ |sort -n |tail
      

      【讨论】:

      • 您可能想要添加更多关于数据库存储数据的假设的上下文、输出的样子等。
      • 虽然这可能是一个准确的答案,但最好包含一些解释。
      • CentOS 上正确的命令是这个:du -k /var/lib/pgsql/ | sort -n | tail
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      相关资源
      最近更新 更多