PostgreSQL 19 的 REPACK 命令怎么用
Shaun Thomas 介绍 PostgreSQL 19 新增的 REPACK:重写膨胀的表并把空闲空间还给操作系统,这是 VACUUM 做不到的。写法是 REPACK (VERBOSE, ANALYZE) 表名,CONCURRENTLY 用复制槽捕获重写期间的改动以避开长时间排他锁,USING INDEX 按索引物理排序,接手 CLUSTER 的活。注意它不能用于无日志表和分区表,也不能放进事务块,并发形态还不是 MVCC 安全的。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 14 条。
Shaun Thomas 介绍 PostgreSQL 19 新增的 REPACK:重写膨胀的表并把空闲空间还给操作系统,这是 VACUUM 做不到的。写法是 REPACK (VERBOSE, ANALYZE) 表名,CONCURRENTLY 用复制槽捕获重写期间的改动以避开长时间排他锁,USING INDEX 按索引物理排序,接手 CLUSTER 的活。注意它不能用于无日志表和分区表,也不能放进事务块,并发形态还不是 MVCC 安全的。
Christophe Pettus 讲 Percona 的开源透明加密扩展 pg_tde,当前 2.1.2,官方口径的开销在 10% 以内。它对显式标记的堆表及其索引、TOAST 表、序列和 WAL 做块级加密,内部密钥加密数据、主密钥再加密内部密钥,主密钥放在 Vault 或 KMIP 服务里。没覆盖的部分要留意:系统目录仍是明文,临时溢出文件不加密,而且不支持 pg_upgrade。他的建议是只有合规硬性要求或需要按表加密时才上。
Greg Burd 报告 clang-20 的自动向量化在 RISC-V 构建上生成了错误的散布写入,受影响的不止 DES 加密代码。他排查出三处:pgcrypto 的 crypt-des.c、时区编译器 zic.c 和 pg_trgm 的 trgm_op.c。zic.c 尤其麻烦,时区数据编译出错很难被发现。问题只在 -O2 和 -O3 下、编译器生成 RVV 散布存储时出现。Tom Lane 指出时区数据的测试覆盖有限。
Joel Jacobson 在推进一项名为 key joins 的 SQL 语言特性,并打算提交 SQL 委员会。写法形如 LEFT JOIN 表 FOR KEY (列) -> 别名 (列),直接在连接里声明外键关系。补丁从 v4 改到 v6,修掉了构建失败与测试问题。Matthias van de Meent 建议支持引用命名的外键约束;Laurenz Albe 想用 FROM 和 TO 取代箭头,Joel 说用户反馈显示箭头更清楚。
Nathan Bossart 拿出一版工作补丁来解决 PQfn() 的弃用:在 libpq 里引入回调机制处理预备语句被释放的通知,走协议扩展而不是次版本号,对旧服务端或旧客户端回退到 PQexecParams()。Jacob Champion 建议在切到回退方案之前先把 PQfn() 保留几个版本,并对基于通知的架构表示怀疑,更倾向中间件层面的上下文隔离。相关讨论已另开线程继续。
catalog_xmin 不推进的疑虑被认为与 CLUSTER 同源、可单独处理,v4 的代码改动获批。
缺失的 procsignalbarrier 已补上并带测试,多余的 DELAY_CHKPT_START 标志将在 19 里移除。
先建表能省一次更新,但会撞上禁止依赖不存在对象的新规则,改到订阅之后建更合规。
审阅者主张把捕获放进创建槽的内部函数,才能覆盖所有调用方,并留意锁的处理。
Christophe Pettus 的 GUC 系列新篇,只有开了 track_commit_timestamp 才需要关心。