ARM (aarch64) での非デフォルトロケールでのアップグレード
コンテナ2つで構成された単一サーバーでの不具合のあるアップグレードの修正に時間を費やしました。
- 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日前に作成されていたため、オプションの探索に費やした長い道のりは言及していません。適切な、あるいは少なくとも動作する解決策にたどり着く前に、 いじくり回す必要がありました。
これが皆さんの時間を節約できれば幸いです。