返回首页
最新
我最近在PostgreSQL上遇到了一个独特的索引故障。为了澄清,这并不是Postgres的问题,而是我的错误。
幸运的是,这个问题出现在测试环境而不是生产环境,但我认为其他PostgreSQL用户可能会对此感兴趣。
在写入一组数据和下一组依赖于ON CONFLICT来更新/插入行之间,我切换了Docker镜像,以便使用一些内置工具。
最初的镜像是基于alpine/musl的,而后来的镜像是基于Debian/Glib的。
据我所知,字节排序是不同的,索引操作没有找到应该存在的一组字节。
如果我进行了转储/恢复,这就不会成为问题,但我只是直接在现有存储卷上切换了镜像。哎呀。
表面上看,索引是活动的,并处于强制状态。
然而,REINDEX失败了,因为存在重复项!
对我来说,我修复了重复项,进行了REINDEX,然后进行了转储恢复。
但值得注意的是,考虑到许多备份机制依赖于存储卷快照,全局重建索引在恢复后会捕捉到这些类型的问题,如果这是任何人的潜在问题。
我在此邀请即将到来的批评浪潮,我会选择忽略,纯粹是为了让其他人能够找到这个信息,可能会和我做同样的事情。