@ledsun blog

無味の味は佳境に入らざればすなわち知れず

WARNING: collation "ja-x-icu" has version mismatch

PostgreSQLで次の警告が表示されました。

2022-03-22 18:00:35.147 JST [68445] WARNING:  collation "ja-x-icu" has version mismatch
2022-03-22 18:00:35.147 JST [68445] DETAIL:  The collation in the database was created using version 153.14.39, but the operating system provides version 153.112.40.
2022-03-22 18:00:35.147 JST [68445] HINT:  Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."ja-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version.

意味はわかりません。 表示されたガイドに従ってコマンドを実行してみます。

~/px►psql postgres
psql (14.2)
Type "help" for help.

postgres=# ALTER COLLATION pg_catalog."ja-x-icu" REFRESH VERSION
postgres-# ;
NOTICE:  changing version from 153.14.39 to 153.112.40
ALTER COLLATION

良さそうです。

参考

PostgreSQL 10のICUコレーションを使うと日本語を普通にソートでき、更に文字順序までカスタマイズできる – yohgaki's blog

ソート順序はICUのバージョンによって変わる場合があります。このため、ICUバージョンが異るとエラーが発生することがあります。

PostgreSQL 10からja-x-icuという日本語の順序の指定方法が追加されたそうです。 これにバージョンが存在するそうです(言われてみれば、そらそうですね)。 PostgreSQLをバージョンアップしたときに、DB内のICUバージョンとPostgreSQL側のICUバージョンがズレるみたいです。