tencent cloud

云数据库 PostgreSQL

动态与公告
产品动态
产品简介
产品概述
产品特性
产品优势
应用场景
信息安全说明
地域和可用区
产品功能列表
大版本生命周期说明
MSSQL 兼容版
产品计费
计费概述
实例类型与规格
购买方式
退费说明
欠费说明
备份空间收费说明
快速入门
创建 PostgreSQL 实例
连接 PostgreSQL 实例
管理 PostgreSQL 实例
数据导入
通过 DTS 迁移数据
内核能力介绍
内核版本概述
内核版本更新动态
查看内核版本
自研内核功能介绍
数据库审计
审计服务说明
开通审计服务
查看审计日志
修改审计服务
审计性能说明
用户指南
实例管理
升级实例
CPU 弹性扩容
只读实例
账号管理
数据库管理
参数管理
日志管理及分析
备份与恢复
数据迁移
插件管理
网络管理
访问管理
数据安全
租户及资源隔离
安全组
监控与告警
标签
AI 实践
使用 tencentdb_ai 插件调用大模型
使用 tencentdb_ai 插件构建 AI 应用
结合 Supabase 快速构建基于云数据库 PostgreSQL 的后端服务
实践教程
跨库访问
如何在 PostgreSQL 中自动创建分区
基于 pg_roaringbitmap 实现超大规模标签查找
一条 SQL 实现查询附近的人
如何配置云数据库 PostgreSQL 作为 GitLab 外部数据源
通过 cos_fdw 插件支持分级存储能力
通过 pgpool 实现读写分离
通过 auto_explain 插件实现慢 SQL 分析
使用 pglogical 进行逻辑复制
使用 Debezium 采集 PostgreSQL 数据
在 CVM 本地搭建 PostgreSQL 异地灾备环境
只读实例与只读组实践教程
如何使用云函数定时操作数据库
表膨胀处理
性能白皮书
测试方法
测试结果
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Read-only Replica APIs
Backup and Recovery APIs
Parameter Management APIs
Security Group APIs
Performance Optimization APIs
Account APIs
Specification APIs
Network APIs
Data Types
Error Codes
常见问题
相关协议
Service Level Agreement
Terms of Service
词汇表
联系我们

表膨胀处理

PDF
聚焦模式
字号
最后更新时间: 2026-03-11 15:07:27
云数据库 PostgreSQL 支持通过插件 pg_repack 在线清理表空间,有效解决因对全表大量更新等操作引起的表膨胀问题。与 CLUSTERVACUUM 不同,pg_repack 在线运行,处理过程中无需在已处理的表上持有独占锁,同时 pg_repack 启动效率高,性能与直接使用 CLUSTER 相当。本文将详细介绍如何通过 pg_repack 处理表膨胀。更多的 pg_repack 使用场景请参考 官方文档
注意:
pg_repack 需要额外的存储空间。全表 repack 时,剩余存储空间大小需要至少是待 repack 表大小的2倍,请提前升级云数据库 PostgreSQL 实例配置。
pg_repack 无法操作临时表、无法操作 GiST 索引。
pg_repack 运行时会持有 ACCESS SHARE 锁,无法对 repack 操作中的表执行 DDL。
重建表和索引时会占用较多的磁盘 IO,请在业务低峰期执行。
目标表必须具有 PRIMARY KEY,或者至少在 NOT NULL 列上具有 UNIQUE 索引。

前置条件

已有一个云数据库 PostgreSQL 实例,创建请参考 创建 PostgreSQL 实例
该实例已安装 pg_repack 插件,安装请参考 如何在云数据库 PostgreSQL 实例中创建插件
已有一台云服务器 CVM ,该云服务器跟云数据库 PostgreSQL 实例在同一个 VPC 网络。Linux 系统的云服务器配置请参见 快速配置 Linux 云服务器
云服务器 CVM 实例已安装 psql 客户端,详细安装教程请参考 PostgreSQL 官方文档

安装客户端

使用之前请先在云服务器上安装客户端,单击 安装包下载地址,并上传安装包进行安装。
unzip pg_repack-1.5.2.zip
cd pg_repack-1.5.2
make && make install

清理单表

-- 检查但不执行
pg_repack -k --dry-run --no-order -h 10.*.*.* -p 5432 -U user -d database -t schema1.table1
-- 检查并执行
pg_repack -k --no-order -h 10.*.*.* -p 5432 -U user -d database -t schema1.table1

清理单个 schema

-- 检查但不执行
pg_repack -k --dry-run --no-order -h 10.*.*.* -p 5432 -U user -d database -c schema
-- 检查并执行
pg_repack -k --no-order -h 10.*.*.* -p 5432 -U user -d database -c schema

清理单个库

-- 检查但不执行
pg_repack -k --dry-run --no-order -h 10.*.*.* -p 5432 -U user -d database
-- 检查并执行
pg_repack -k --no-order -h 10.*.*.* -p 5432 -U user -d database

清理整个实例(仅清理安装 pg_repack 插件的数据库)

-- 检查但不执行
pg_repack -k --dry-run --no-order -h 10.*.*.* -p 5432 -U user -a
-- 检查并执行
pg_repack -k --no-order -h 10.*.*.* -p 5432 -U user -a

检查清理效果

-- 查看库大小top,sql如下:
select datname,pg_size_pretty(pg_database_size(datname)) from pg_database order by pg_database_size(datname) desc;
-- 查看库中表大小top,sql如下:
SELECT relname AS table_name, pg_size_pretty(pg_total_relation_size(relid)) AS total_size FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
-- 查看特定表的大小,sql如下:
select pg_size_pretty(pg_total_relation_size('pgtest'));

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈