PostgreSQL 默认使用外部库的语言环境排序规则,操作系统升级可能改变排序规则,导致字符串索引损坏,必须重建。建议用 C 排序规则建库:它按字节比较,只依赖字符编码,永不改变,且比较更快。若需自然语言排序,可仅在个别列或 ORDER BY 中指定其他排序规则,以减少可能损坏的索引。v17 起可用内置 C 排序规则,降低外部依赖。
生产环境PostgreSQL升级时,可先识别潜在受损索引,或用amcheck检测实际损坏。若数据库小且停机不关键,直接重建所有可能受损索引;否则应在克隆库上测试升级,找出真正损坏的索引,虽更费事,却能大幅减少需重建的索引数量。
本文讨论了在PostgreSQL中修复因错误声明IMMUTABLE函数导致的索引损坏问题。通过创建自定义ENUM类型和相应的索引,展示了ENUM值重命名后查询结果的不一致性。解决方案是使用REINDEX重建损坏的索引,强调在定义自定义函数时要谨慎,避免将函数的波动性类别设置得过于严格。
完成下面两步后,将自动完成登录并继续当前操作。