Postgres 10以降には、テキスト処理やその他の国際化の問題のために International Components for Unicode(ICU) ライブラリが組み込まれています。
分類ルールの進化など、人間の言語に変化が起こります。したがって、照合定義はICUでバージョン管理されます。
➥照合順序のバージョン番号を特定するにはどうすればよいですか?
私は知っています Postgresが報告します 照合バージョンの不一致エラーメッセージの一部としてバージョン番号。エラーメッセージを待つのではなく、積極的にバージョンを照会する方法はありますか?
pg_collation_actual_version() 関数を確認してください。
ALTER COLLATION のPostgreSQLドキュメントでは、この問題について「Notes」セクションで説明されているようです。
ICUライブラリによって提供される照合を使用する場合、照合オブジェクトの作成時に、ICU固有の照合のバージョンがシステムカタログに記録されます。照合が使用されると、現在のバージョンがチェックされます記録されたバージョンに対して、そして不一致があると警告が出されます...
データベースシステムは特定のソート順を持つ格納されたオブジェクトに依存しているため、照合定義の変更により、インデックスの破損やその他の問題が発生する可能性があります。 ...
次のクエリを使用して、現在のデータベースで更新が必要なすべての照合と、それらに依存するオブジェクトを識別できます。
SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation", pg_describe_object(classid, objid, objsubid) AS "Object" FROM pg_depend d JOIN pg_collation c ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid WHERE c.collversion <> pg_collation_actual_version(c.oid) ORDER BY 1, 2;
与えられたクエリが pg_collation_actual_version() 関数を使用していることがわかります。これは次のように定義されています。
pg_collation_actual_version
は、現在オペレーティングシステムにインストールされている照合オブジェクトの実際のバージョンを返します。これがpg_collation.collversion
の値と異なる場合、照合に依存するオブジェクトを再構築する必要があります。