Postgres 数据清理过程

查看数据量大的表

 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 limit 100

image.png

查看数据量大的字段

select
 sum(pg_column_size(path_analyze_result)) as path,
 sum(pg_column_size(object_analyze_result)) as object,
 sum(pg_column_size(correlation_analyze_result)) as correlation
from nap_policy_service_request;

   path   |  object   | correlation
----------+-----------+-------------
 32640372 | 252413523 | 48469497241
(1 row)

数据处理

如果是一些不重要的数据,可以直接删除

delete from table_name

然后需要清除索引和TOAST数据

VACUUM FULL table_name;

nap=> \dt+ table_name
                              List of relations
 Schema |            Name            | Type  | Owner |  Size   | Description
--------+----------------------------+-------+-------+---------+-------------
 public | table_name | table | nap   | 3047 MB |
(1 row)

如果不能删除,可以进行数据迁移,分库分表等处理