2016-12-05 54 views
1

如果你谷歌的「postgresql表大小」,你會得到這個很好的查詢。 https://wiki.postgresql.org/wiki/Disk_Usage爲什麼不能看到我的模式大小

SELECT *, pg_size_pretty(total_bytes) AS total 
    , pg_size_pretty(index_bytes) AS INDEX 
    , pg_size_pretty(toast_bytes) AS toast 
    , pg_size_pretty(table_bytes) AS TABLE 
    FROM (
    SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes FROM (
     SELECT c.oid,nspname AS table_schema, relname AS TABLE_NAME 
       , c.reltuples AS row_estimate 
       , pg_total_relation_size(c.oid) AS total_bytes 
       , pg_indexes_size(c.oid) AS index_bytes 
       , pg_total_relation_size(reltoastrelid) AS toast_bytes 
      FROM pg_class c 
      LEFT JOIN pg_namespace n ON n.oid = c.relnamespace 
      WHERE relkind = 'r' 
) a 
) a; 

我有一個模式app:在結果

enter image description here

但犯規顯示:在結果

enter image description here

爲什麼app架構犯規說明了什麼?

我嘗試第二個query,並返回空結果。

select table_name, pg_relation_size(table_name) 
from information_schema.tables 
where table_schema = 'app' 
order by 2 
+1

'app'不包含任何表格。如果確實如此,你會在結果中看到它們。 –

+0

@NickBarnes你是對的,應用程序只有功能和類型。 –

回答

0

不幸的是,即使psql命令行工具也沒有顯示模式中所有對象的總大小。所有命令如數據庫的「\ l +」或表格的「\ dt +」都以「+」形式顯示,也是總大小。模式只有「\ dn +」不顯示大小。

從pg_class中選擇可能是最好的,但不要只爲「r」過濾 - 模式也包含索引和其他對象。

+0

問題不是對象在架構中,架構是完全丟失的 –

+0

因爲您從pg_class中選擇並且它僅包含「r =普通表,i =索引,S =序列,v =視圖,m =物化視圖,c =複合類型,t = TOAST表,f =外部表「 - 見這裏https://www.postgresql.org/docs/current/static/catalog-pg-class.html。 程序列在pg_proc和pg_type中的類型 – JosMac

+0

對不起,我已經找到了錯誤,感謝Nick評論 –

相關問題