赞
踩
RDS PostgreSQL支持通过插件pg_repack在线清理表空间,有效解决因对全表大量更新等操作引起的表膨胀问题。pg_repack无需获取排它锁,相比CLUSTER或VACUUM FULL更加轻量化。
RDS实例需要满足以下条件:
实例大版本 | 内核小版本 |
---|---|
PostgreSQL 10、11、12或13 | 20210331及以上 |
PostgreSQL 14或15 | 20221030及以上 |
说明
查看和升级内核小版本,请参见升级内核小版本。
pg_repack插件支持全表repack和索引repack。
说明
pg_repack会在第a、b步和第f、g步短暂持有ACCESS EXCLUSIVE锁。其余步骤pg_repack只需要持有原表的ACCESS SHARE锁,不影响原表的INSERT、UPDATE和DELETE。
说明
请使用高权限账号执行如下命令。
CREATE EXTENSION pg_repack;
DROP EXTENSION pg_repack;
pg_repack插件需要配合客户端使用,以ECS Alibaba Cloud Linux 3.2104及以上版本为例,参考以下命令:
sudo yum install postgresql* redhat-rpm-config libpq* openssl-devel readline-devel -y
export PATH=$PATH:/usr/lib64/pgsql/postgresql-12/bin
- wget https://github.com/reorg/pg_repack/archive/refs/tags/ver_1.4.6.tar.gz
- tar zxvf ver_1.4.6.tar.gz
- cd pg_repack-ver_1.4.6
- make && make install
- -- 检查但不执行:--dry-run
- pg_repack --dry-run --no-superuser-check --echo --no-order -h 连接串 -p 端口 -d database1 -U user --table schema1.table1
-
- -- 检查并执行
- pg_repack --no-superuser-check --echo --no-order -h 连接串 -p 端口 -d database1 -U user --table schema1.table1
Q:报错“ERROR: pg_repack failed with error: You must be a superuser to use pg_repack”。
A:请使用-k或--no-superuser-check,避免没有权限。
重要
全表repack时,无法通过此方式拥有权限。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。