「文字列比較に使用する照合を決定できなかった」とPostgreSQLエラーを解決するにはどうすればよいですか?
-
22-10-2019 - |
質問
この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);
所属していません dba.stackexchange