[英]How to get the sum of FreeSpace of all the tables in a database
使用以下命令获取数据库中的所有用户表名称:
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作为答案?
我建议您首先通过一个表列出数据库中的所有表(例如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
SELECT sum(avail) as freespace
FROM (
SELECT concat(schemaname,'.',tablename) as fulltablename, (pg_freespace(concat(schemaname,'.',tablename))).*
FROM pg_tables
) t
我希望这个答案能使您满意。
我使用以下查询解决了我的问题(以获取架构所有表的自由空间之和)
SELECT sum(avail) as freespace
FROM (
SELECT (pg_freespace(concat(schemaname,'."',tablename,'"'))).*
FROM pg_tables where schemaname = 'mySchema'
) t
;
我已经调整了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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.