「文字列比較に使用する照合を決定できなかった」とPostgreSQLエラーを解決するにはどうすればよいですか?

dba.stackexchange https://dba.stackexchange.com/questions/17604

質問

このSQLスクリプトを実行するとき、私は取得します:

エラー:文字列比較に使用する照合を決定できませんでした

これが34行目です:

CREATE TEMPORARY TABLE weight_options AS
  SELECT
    io.lot_id
    , io.vin
    , map.fkey_style AS chrome_styleid
    , SUM( CASE WHEN co.code = io.code THEN 1 ELSE 0 END ) AS exact_option
    , SUM( CASE WHEN length(io.code) = 2 AND co.code LIKE io.code || '%' THEN 1 ELSE 0 END ) AS appx_option
    , (
      SUM( CASE WHEN co.code = io.code THEN 2 ELSE 0 END )
      + SUM( CASE WHEN length(io.code) = 2 AND co.code LIKE io.code || '%' THEN 1 ELSE 0 END )
    ) AS option_weight
  FROM inventory.options AS io
  -- options *must* have same index as inventory.vehicles
  JOIN chrome_vinmatch_best_match AS vd
    USING ( vin )
  JOIN chrome_vinmatch.style AS map
    ON ( vd.chrome_patternid = map.fkey_pattern )
  JOIN chrome_nvd.options AS co
    ON ( io.code = co.code AND map.fkey_style = co.fkey_style AND io.code IS NOT NULL )
  GROUP BY io.lot_id, io.vin, map.fkey_style
;

私はちょうどのインストールからの移行をしました 8.4.11 のインストールに 9.1.3 使用 pg_dump.

役に立ちましたか?

解決

でエラーが見つかりました 9.1.2のノートをリリースします

contrib/citextのアップグレードスクリプトを作成しますCitext列とインデックス(Tom Lane)の照合を修正します

既存のCiteXT列とインデックスは、PRE-9.1サーバーからのPG_UPGrade中に協力可能なデータ型であると正しくマークされていません。それは、「文字列比較に使用する照合を決定できなかった」などのエラーで失敗する操作につながります。この変更により、citextモジュールを適切な9.1拡張機能にアップグレードする同じスクリプトによって修正できます。

この問題に苦しんでいる以前にアップグレードされたデータベースがあり、既にcreate拡張機能コマンドを実行している場合、Sharedir/extension/citextの最後に見つかった更新コマンドを手動で実行できます(スーパーユーザーとして) - Unpackaged-- 1.0.sql。 (PG_CONFIGを実行してください-Sharedir ShareDirがどこにあるのか不確かな場合。)

だから私はそのファイルを見ました UPDATE コマンドとこれらを見つけました:

UPDATE pg_catalog.pg_type SET typcollation = 100
WHERE oid = 'citext'::pg_catalog.regtype;

UPDATE pg_catalog.pg_attribute SET attcollation = 100
WHERE atttypid = 'citext'::pg_catalog.regtype;

UPDATE pg_catalog.pg_index SET indcollation[0] = 100
WHERE indclass[0] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);

UPDATE pg_catalog.pg_index SET indcollation[1] = 100
WHERE indclass[1] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);

UPDATE pg_catalog.pg_index SET indcollation[2] = 100
WHERE indclass[2] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);

UPDATE pg_catalog.pg_index SET indcollation[3] = 100
WHERE indclass[3] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);

UPDATE pg_catalog.pg_index SET indcollation[4] = 100
WHERE indclass[4] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);

UPDATE pg_catalog.pg_index SET indcollation[5] = 100
WHERE indclass[5] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);

UPDATE pg_catalog.pg_index SET indcollation[6] = 100
WHERE indclass[6] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);

UPDATE pg_catalog.pg_index SET indcollation[7] = 100
WHERE indclass[7] IN (SELECT oid FROM pg_catalog.pg_opclass
                      WHERE opcintype = 'citext'::pg_catalog.regtype);
ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top