PostgreSQL 15 更新

ARM (aarch64) 上的升级(非默认区域设置)

我花了一些时间修复了一个单服务器双容器设置中的错误升级。

  1. 它的 CPU 是 ARM
  2. Discourse 配置为 en_UK.UTF-8 区域设置

逐步排查后,我发现:

  1. tianon/postgres-upgrade:13-to-15 在 ARM 上无法工作
  2. 区域设置配置存储在 share/${CONTAINER}/postgres_data/postgresql.conf

我首先注释掉了数据容器的 env: 部分,以确保它使用默认区域设置。

因此,为了摆脱升级的混乱,我采取了一个_危险_的步骤,假设 en_GBen_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

:tada:

别以为这很容易:我没有提到探索选项的长路,尤其是在我介入时,管理员界面不可用,而最后一次备份是在 6 天前。我_不得不_摸索一番,才能找到一个合适的——或者至少是可行的——解决方案。

希望这能为一些人节省时间。

5 个赞