使用以下方法获取数据库中的所有用户表名称:
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作为答案?
答案 0 :(得分:0)
我建议您可以先通过表格列表查询数据库中的所有表格,例如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
我希望这个答案能让你满意。
答案 1 :(得分:0)
我使用下面的查询来解决我的问题(获取我的架构的所有表的自由空间的总和)
SELECT sum(avail) as freespace
FROM (
SELECT (pg_freespace(concat(schemaname,'."',tablename,'"'))).*
FROM pg_tables where schemaname = 'mySchema'
) t
;
答案 2 :(得分:0)
我已经调整了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