web-dev-qa-db-fra.com

Type HSTORE n'existe pas avec HSTORE installé PostgreSQL

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.

4
jacobsoloid

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!

7
Fred Stark