要使用以下命令获取数据库中的所有用户表名:

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年的答案?

最佳答案

我建议您可以首先通过数据库中的一个表列表all table(如pg_table)来查询它,然后对其进行求和。如下面的2个查询:
一。列出所有表及其空闲空间:

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

对数据库中的所有可用空间求和:
SELECT sum(avail) as freespace
FROM (
    SELECT concat(schemaname,'.',tablename) as fulltablename, (pg_freespace(concat(schemaname,'.',tablename))).*
      FROM pg_tables
    ) t

我希望这个答案能使你满意。

关于postgresql - 如何获取数据库中所有表的FreeSpace之和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48353386/

10-10 17:21