web-dev-qa-db-ja.com

hstoreタイプがhstoreがインストールされたpostgresqlに存在しません

最近、次のコマンドを使用して、データベース構造をデータベース間でコピーする必要がありました

pg_dump -c -S database_name > pg_dump_date.sql

次に、新しいデータベースでダンプファイルを実行しました

psql < pg_dump_date.sql

そして、私のスキーマが再作成され、拡張機能がインストールされました。

インストールされている拡張機能を確認した後、hstoreがインストールされていることがわかりますが、次のようなhstoreの基本的な演算子を試すと

SELECT id FROM schema_name.table_name WHERE hstore_column->'hstore_key'::TEXT = 'hstore_value'

私はそのエラーを受け取ります

operator does not exist: schema_name.hstore -> text 

キーをキャストしないと同様のエラーが発生します

operator does not exist: schema_name.hstore -> unkown

私の最初の本能は、単にhstore拡張を削除して再インストールすることでしたが、そうすると、多数のユーザー関数、トリガー、およびその他のhstoreタイプへの依存関係も削除されます。

Hstore拡張のカスケードドロップを実行する前に、このエラーを修正する方法はありますか?私はpostgresql 9.3サーバーを使用しています。

4
jacobsoloid

この質問に遭遇した人のために。今日、この問題に遭遇し、解決策を見つけました。

拡張機能をインストールした場所によっては、search_pathにない場合があります。私の場合、同じdbのスキーマ「shared_extensions」にインストールしました。

SHOW search_pathを使用すると、$user, publicが表示されます。これは、拡張機能とその演算子のshared_extensionsを検索していないことを意味します

これを修正するには、SET search_path TO "$user", public,に続けて、拡張機能がインストールされているスキーマを実行します。

お役に立てば幸いです。

7
Fred Stark