最近、次のコマンドを使用して、データベース構造をデータベース間でコピーする必要がありました
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サーバーを使用しています。
この質問に遭遇した人のために。今日、この問題に遭遇し、解決策を見つけました。
拡張機能をインストールした場所によっては、search_pathにない場合があります。私の場合、同じdbのスキーマ「shared_extensions」にインストールしました。
SHOW search_path
を使用すると、$user, public
が表示されます。これは、拡張機能とその演算子のshared_extensionsを検索していないことを意味します
これを修正するには、SET search_path TO "$user", public,
に続けて、拡張機能がインストールされているスキーマを実行します。
お役に立てば幸いです。