web-dev-qa-db-ja.com

Postgresqlエラーを解決するにはどうすればよいですか? '照合可能なタイプcitextの列 "foo"の照合は派生しませんでした'?

つい最近、Postgresql8.4.11から9.1.3にアップグレードしました。その過程でpg_dumpを使用しました。エラーが発生しました:

エラー:照合可能なタイプのcitextを持つ列 "vin"の照合は導出されませんでした
ヒント:COLLATE句を使用して、照合を明示的に設定します。

これは 以前に発生した問題 の続きです。リリースノートで提案されている修正がキャッチされなかったようです カスタムドメイン 。 8.4の CREATE DOMAIN ステートメントはCOLLATE句さえサポートしていなかったようです。

これが私がvinタイプを作成した方法です。

CREATE DOMAIN inventory.valid_vin AS citext
  CHECK ( inventory.valid_vin( VALUE ) );
5
Evan Carroll

これに関する詳細については、このスレッドで私たちの通信を見つけてください:

問題

問題は馬の口、トム・レーン、

まあ、それがあなたがcitext *を作成している方法であるなら、ええ、それは壊れています。 9.1以降、citextタイプは属性「COLLATABLE = true」で作成する必要があります。提案されたUPDATEステートメントは、事後にそれを実行できないことを修正する手段ですが、citextの上に既に作成されているドメインはカバーしていません。

出典: http://archives.postgresql.org/pgsql-general/2012-05/msg00262.php

*私はcitextを作成していましたが、特定のダンプで作成されていたため、特別なことは何もありませんでした。

したがって、citextを介してドメインを持っている場合、8.3-> 9.1からのダンプ/復元はサポートされません。

解決

この問題を回避するには、最初に次のようにします。

  • CREATE EXTENSION citextダンプをロードする前。
  • または、パッチをハッキングして、citextを介してDOMAINSを操作します。
2
Evan Carroll