J'ai récemment dû copier sur une structure de bases de données d'une base de données à une autre avec la commande
pg_dump -c -S database_name > pg_dump_date.sql
J'ai ensuite couru le fichier de vidage sur la nouvelle base de données avec
psql < pg_dump_date.sql
Et mes schémas ont été recréés, ainsi que mes extensions ont été installés.
Après avoir vérifié les extensions installées, je peux voir que HSTORE est installé, mais lorsque j'essaie des opérateurs de base pour HSTORE comme
SELECT id FROM schema_name.table_name WHERE hstore_column->'hstore_key'::TEXT = 'hstore_value'
Je reçois l'erreur que
operator does not exist: schema_name.hstore -> text
Je reçois une erreur similaire si je n'essaie pas de jeter la clé
operator does not exist: schema_name.hstore -> unkown
Mon premier instinct était de laisser simplement tomber l'extension htstore et de le réinstaller, mais cela déposerait également mes nombreuses fonctions utilisateur, des déclencheurs et d'autres dépendances sur le type htstore.
Vous trouverez une goutte de cascade de l'EXENTATION HSTORE, est-ce que je peux corriger cette erreur? J'utilise un serveur PostgreSQL 9.3.
Pour quiconque qui circule dans cette question. J'ai couru dans ce problème aujourd'hui et j'ai trouvé une solution.
Selon l'endroit où vous avez l'extension installée, cela peut ne pas être dans votre Search_Path. Dans mon cas, je l'avais installé dans le schéma "Shared_extensions" sur le même DB.
en utilisant SHOW search_path
affiché $user, public
, ce qui signifie qu'il ne cherchait jamais dans Shared_extensions pour l'extension et son opérateur
Pour résoudre ce problème SET search_path TO "$user", public,
suivi du schéma où l'extension est installée.
J'espère que cela pourra aider!