Postgresql

數據庫是 300 GB,但我只看到小表?

  • June 16, 2021

我想知道為什麼我的數據庫這麼大。我輸入:

SELECT pg_size_pretty(pg_database_size('defaultdb'));

它說defaultdb是259 GB。那是巨大的。

所以我在 psql 中列出了我的表:

\dt

對於我鍵入的每個表:

SELECT pg_size_pretty( pg_total_relation_size('tablename') );

我得到:

city_zip 0.048 MB
ntaboundaries 1.9 MB
zipcodeboundaries 2.4 MB
spatial_ref_sys 7.2 MB

到底是怎麼回事?是pg_database_size()告訴我分配的記憶體,而不是使用的儲存記憶體嗎?是否有其他隱藏位置,例如日誌,佔用儲存空間,如果有,如何查詢日誌的大小?

pg_total_relation_size()總結屬於表的所有內容,包括膨脹。

但是\dt在 psql 中並沒有列出數據庫的所有表,它只包括目前search_path. 檢查:

SHOW search_path;

pg_catalog始終排除其中的系統表。並且可能還有其他模式。要查看數據庫中的所有表

\dt *.*

手冊:

只要完全省略了模式參數,\d 命令就會顯示在目前模式搜尋路徑中可見的所有對象——這相當於使用*模式。(如果對象的包含模式在搜尋路徑中,並且在搜尋路徑的前面沒有出現相同類型和名稱的對象,則稱該對像是可見的。這等效於可以通過名稱引用對象而無需顯式模式的聲明資格。)要查看數據庫中的所有對象而不管可見性如何,請*.*用作模式。

要查看目前數據庫中最大的關係(確保連接到正確的關係!):

SELECT pg_size_pretty(pg_total_relation_size(c.oid)), c.oid::regclass, relkind
FROM   pg_class c
ORDER  BY pg_total_relation_size(c.oid) DESC
LIMIT  10;

我使用它c.oid::regclass是因為它會在需要可見的地方自動顯示具有模式限定的表。

請注意,在使用 查詢時,索引 ( relkind = 'i') 包含在表 ( relkind = 'r')的大小中pg_total_relation_size()。但它們也在此列表中單獨列出。pg_class手冊中有關的詳細資訊。

有關的:

引用自:https://dba.stackexchange.com/questions/294327