我有一个带有 Postgres 9.6 的 Ubuntu 18.04.0。
在 Ubuntu 升级之前以下命令结果是:
vodka@ubuntu140:~$ ( echo "1-1"; echo "11" ) | LC_COLLATE=en_US.UTF-8 sort
1-1
11
但是通过(18.04.5)将 Ubuntu 18.04 升级到最新版本后,apt upgrade
上述命令的结果完全改变了:
vodka@ubuntu140:~$ ( echo "1-1"; echo "11" ) | LC_COLLATE=en_US.UTF-8 sort
11
1-1
因此,我们的生产 Postgres 数据库开始运行非常缓慢,并且 REINDEX 停机时间很长。排序方法对于 Postgres 数据库非常重要: https://wiki.postgresql.org/wiki/Locale_data_changes
请阅读“测试整理”部分。
这是 Ubuntu 的正常行为吗?为什么 glibc 在 LTS 版本中完全改变而没有“重大升级”?我没想到这一点……
答案1
为什么 glibc 在 LTS 版本中完全改变而没有“重大升级”?
但事实并非如此。
18.04.5 基于 glibc-2.27,它仍然具有“旧”Unicode CLDR。
更新的 CLDR 附带 glibc-2.28。
使用 18.04.5 获得的结果似乎合法,而您提到的使用 18.04.0 的结果很奇怪,就好像旧版本具有较新的 glibc 库,并且 18.04.0 => 18.04.5 进行了降级。
换句话说,您提到的旧结果实际上是新的(从 18.04 的角度来看是未来的结果),而您提到的新的结果实际上是旧的。