簡體   English   中英

如何獲取數據庫中所有表的FreeSpace之和

[英]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
  1. 對數據庫中的所有可用空間求和:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM