PG - 數據庫空間占用情況 & 各表占用磁盤空間


  • 1_ 統計PG數據庫中各表占用磁盤大小: (直接使用SQL)
SELECT
    table_schema || '.' || table_name AS table_full_name,
    pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
	ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC  
  • 2_ 統計各數據庫占磁盤大小:(直接使用SQL)
SELECT	d.datname AS Name,  
		pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
		CASE 
			WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
			THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
			ELSE 'No Access'
		END AS SIZE
FROM pg_catalog.pg_database d
    ORDER BY	CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
					 THEN pg_catalog.pg_database_size(d.datname)
					 ELSE NULL
				END DESC
	LIMIT 20 ;  
  • 3_ 清理機制:
    • 1. 如果數據無法做清理. 那么請給 "磁盤擴容"
    • 2. 確定表數據可以清理的情況下. 建議將表數據備份后刪除. 如下操作 
1. 創建備份表(可加WHILE.  也可不加WHILE條件.   不加就是備份整個表.)
    CREATE TABLE TABLE_NAME(備份表名) AS SELECT * FROM TABLES-NAME(需要備份的表) WHERE DATA <=DATE

2. 將數據被分成dump文件
    pg_dump -d 數據庫名 -U 數據庫用戶 -t TABLE_NAME -Fc -a -f TABLE_NAME.dump

3. 恢復數據(需要恢復的表必須和備份的dump表結構&順序等一模一樣)
    pg_restore -d 數據庫名 -U 數據庫用戶 -t TABLE_NAME(需要恢復的表名) -Fc -a TABLE_NAME.dump

4. 刪除數據(可加WHILE.  也可不加WHILE條件.   不加就是刪除整個表.)
    DELETE FROM TABLE_NAME WHERE DATA <= DATA;

5. 數據刪除后數據庫目錄空間不會馬上主動釋放.需執行以下命令
    VACUUM FULL TABLE_NAME

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM