pg_repack
1. 概述
pg_repack 是 PostgreSQL 的一个扩展,用于在线重整表和索引、消除存储膨胀。它能达到与 VACUUM FULL 类似的效果,回收空间,但几乎不阻塞业务读写。
IvorySQL 的 PG 模式和 Oracle 兼容模式都已经适配 pg_repack。
开源协议:BSD-3-Clause License
2. 原理
VACUUM FULL 因没有"重写期间的并发变更捕获机制",重写整表时全程持有 ACCESS EXCLUSIVE 锁,期间表不可读写,锁时长随表增大。pg_repack 通过"影子表 + 触发器 + 文件节点交换"把强锁压缩到首尾两个瞬间,从而支持在线重整。