PG :: UndefinedObject: ERROR: el tipo “hstore” no existe pero sí existe

En primer lugar, esto puede parecer un duplicado de:

postgres hstore existe y no existe al mismo tiempo

pero no lo es. Mientras que estoy recibiendo el mismo mensaje de error en la circunstancia. Al verificar si hstore está instalado en la base de datos, podemos ver que es:

./psql -d photographerio_development -c '\dx' List of installed extensions Name | Version | Schema | Description ---------+---------+------------+-------------------------------------------------- hstore | 1.2 | hstore | data type for storing sets of (key, value) pairs plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language 

y está también en la plantilla_1 DB.

Entonces, cuando bash ejecutar la migración para agregar el hstore, obtengo el PG::Error: ERROR: extension "hstore" already exists y cuando comento esta migración, en la siguiente, que requiere el hstore, dice PG::UndefinedObject: ERROR: type "hstore" does not exist que es un poco paradójico.

Es una aplicación Rails 4.0.1 con postgresql 9 y tengo hstore trabajando en otros proyectos que se ejecutan en esta máquina.

Ha instalado la extensión hstore en un esquema llamado hstore que probablemente no se encuentra en su search_path predeterminada.

Debes hacer uno de estos:

  • Agregue hstore a search_path durante la configuración de la conexión;
  • Agregue hstore a search_path con ALTER USER ... SET o ALTER DATABASE ... SET ;
  • Mueva la extensión hstore esquema de hstore a public ; o
  • esquema-califica todas las referencias a hstore , por ejemplo, hstore.hstore(...) . Esto debe hacerse para los operadores también; -> convierte en OPERATOR(hstore.->)

Así es como resolví el problema. Cree un esquema llamado extensiones y otorgue la autorización al nombre de usuario db que utiliza en el proyecto.

 psql -U postgres -d template1 -c "CREATE SCHEMA extensions AUTHORIZATION ;" 

crear las extensiones en el esquema creado (extensiones)

 psql -U postgres -d template1 -c "CREATE EXTENSION IF NOT EXISTS hstore SCHEMA extensions;"