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