[英]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.