【问题标题】:How to get the sum of FreeSpace of all the tables in a database如何获取数据库中所有表的FreeSpace总和
【发布时间】:2018-01-20 06:38:24
【问题描述】:

使用以下方法获取数据库中的所有用户表名称:

select relname from pg_stat_user_tables;

relname
-------
Table1
Table2
Table3

使用以下方法获取一张表的真空标记的可用空间:

SELECT sum(avail) FROM pg_freespace('Table1');

sum
-----
1728

我想在单个查询中获取所有表的总可用空间。

比如说,

Table1 has 1728 freespace
Table2 has 100 freespace
Table3 has 100 freespace

如何获得 1928 作为查询的答案?

【问题讨论】:

    标签: postgresql vacuum


    【解决方案1】:

    我建议您可以先通过一个表来查询它,列出数据库中的所有表,例如pg_table,然后将其全部汇总。比如下面的2个查询: 1.列出所有表及其空闲空间:

    SELECT fulltablename, sum(avail) as freespace
    FROM (
        SELECT concat(schemaname,'.',tablename) as fulltablename, (pg_freespace(concat(schemaname,'.',tablename))).* 
          FROM pg_tables 
        ) t
    GROUP BY fulltablename
    
    1. 汇总数据库中的所有可用空间:
    SELECT sum(avail) as freespace
    FROM (
        SELECT concat(schemaname,'.',tablename) as fulltablename, (pg_freespace(concat(schemaname,'.',tablename))).* 
          FROM pg_tables 
        ) t
    

    希望这个答案能让你满意。

    【讨论】:

    • 谢谢@Mabu Kloesen。它帮助我找出正确的查询。我使用下面的查询来得到我的答案。 SELECT sum(avail) as freespace FROM ( SELECT (pg_freespace(concat(schemaname,'."',tablename,'"'))).* FROM pg_tables where schemaname = 'mySchema' ) t ;
    【解决方案2】:

    我使用下面的查询来解决我的问题(获取我的架构的所有表的可用空间的总和)

    SELECT sum(avail) as freespace
    FROM (
        SELECT  (pg_freespace(concat(schemaname,'."',tablename,'"'))).* 
        FROM pg_tables where schemaname = 'mySchema'
    ) t
    ;
    

    【讨论】:

      【解决方案3】:

      我已经调整了 Mabu 的 sql 来为所有表提供一个单一的总可用空间值

      SELECT sum(freespace) as TotalFreeSpace
      FROM (
          SELECT fulltablename, sum(avail) as freespace
          FROM (
              SELECT concat(schemaname,'.',tablename) as fulltablename, 
              (pg_freespace(concat(schemaname,'.',tablename))).*
              FROM pg_tables
              ) t
          GROUP BY fulltablename) f
      

      【讨论】:

        猜你喜欢
        • 2018-09-15
        • 1970-01-01
        • 2011-02-16
        • 2011-09-07
        • 2011-11-17
        • 2016-08-14
        • 2021-10-17
        • 1970-01-01
        • 2014-02-25
        相关资源
        最近更新 更多