天天看點

PostgreSQL 中系統表 pg_attribute 膨脹現象

PostgreSQL 一覽表 pg_attribute存儲關于表列的資訊,資料庫中每張表中的行都會對應在該系統表 pg_attribute 中。既然存儲的是資料庫中表字段相關的資訊,那麼對表所做的修改都會通過該表記錄。如建立表指定的列,修改表,修改表的資料類型等等。

說明

   PostgreSQL 一覽表 pg_attribute存儲關于表列的資訊,資料庫中每張表中的行都會對應在該系統表 pg_attribute 中。既然存儲的是資料庫中表字段相關的資訊,那麼對表所做的修改都會通過該表記錄。如建立表指定的列,修改表,修改表的資料類型等等。

建立自定義函數檢視某張表的資訊

建立測試表

檢視表字段資訊

PostgreSQL 中系統表 pg_attribute 膨脹現象

  當然,這裡并非僅僅對該表存儲的是資料庫中的表列做描述,而是為了處理在系統表中依然存在表膨脹的現象,如在生産環境中,通常會做删除表或者删除 **schema** 的動作,在 **PostgreSQL** 中,隻要有對表或者 **schema** 的删除動作,那麼就會造成該表 **pg_attribute** 的膨脹。如下:

在某個schema下建立表

檢視表列資訊

檢視表 pg_attribute 的大小

PostgreSQL 中系統表 pg_attribute 膨脹現象

此處對 s1 schema 進行删除重建10000次

檢視 pg_attribute 大小

PostgreSQL 中系統表 pg_attribute 膨脹現象

對 pg_attribute 執行 VACUUM FULL

     當對表執行完 VACUUM FULL 操作時,該膨脹的空間會返還給作業系統

結語

   在實際生産環境中,有可能會忽略該表膨脹問題,會導緻資料庫中的表和資料沒多少,但是資料庫特别大,那麼說明有可能是資料庫系統表中的部分表發生了膨脹現象。該現象也會出現在基于 pg 開發的其他資料庫中,如 Greenplum。