ARM (aarch64) 上的升级(非默认区域设置)
我花了一些时间修复了一个单服务器双容器设置中的错误升级。
- 它的 CPU 是 ARM
- Discourse 配置为
en_UK.UTF-8区域设置
逐步排查后,我发现:
tianon/postgres-upgrade:13-to-15在 ARM 上无法工作- 区域设置配置存储在
share/${CONTAINER}/postgres_data/postgresql.conf中
我首先注释掉了数据容器的 env: 部分,以确保它使用默认区域设置。
因此,为了摆脱升级的混乱,我采取了一个_危险_的步骤,假设 en_GB 和 en_US 之间的排序规则差异可以忽略不计,并无情地将整个集群更新为 en_US:
UPDATE pg_database SET datctype='en_US.UTF-8', datcollate='en_US.UTF-8';
我_不确定_这一步是否必需,YMMV(你的里程可能会有所不同)。我将其留在这里供更有知识的人评论,并且我绝对不推荐对不同语言使用此方法!
然后我替换了 postgresql.conf 中的区域设置:
sed -i -e 's/en_GB/en_US/g' shared/data/postgres_data/postgresql.conf
sudo -H -u discourse ./launcher rebuild data
...
UPGRADE OF POSTGRES COMPLETE
![]()
别以为这很容易:我没有提到探索选项的长路,尤其是在我介入时,管理员界面不可用,而最后一次备份是在 6 天前。我_不得不_摸索一番,才能找到一个合适的——或者至少是可行的——解决方案。
希望这能为一些人节省时间。