2012-09-22 12 views
6

Al utilizar hstore en PostgreSQL 9.2 en una aplicación Rails 3.2, que tiene un error que se queja de la siguiente manera al rastrillar mi base de datos de prueba:Error con la base de datos de prueba utilizando rieles postgres utilizando hstore

PG :: error: ERROR: Tipo " hstore "no existe

Dado que se construyó a partir del esquema, la base de datos de prueba no pasó por la migración de hstore CREAR EXTENSIÓN que la base de datos de desarrollo. Esto causó el error en el rake db: test: prepare.

¿Cómo solucionar esto? De hecho, descubrí una solución, feliz de escuchar más.

Respuesta

11

Simplemente habilité mi base de datos postgresql para que sea compatible con hstore de manera predeterminada (al tener la base de datos de plantillas compatible con hstore). Ejecute el siguiente comando para hacerlo:

psql -d template0 -c 'create extension hstore;' 

Luego, cualquier prueba de Rails db admitirá automáticamente la extensión.

+2

Para mí, 'psql -d template1 -c 'crea extensión hstore;' 'hizo el truco (Postgres 9.1). De acuerdo con una publicación en PostgreSQL.org, "Template0 es la plantilla de base de datos pgsql 'en blanco' que contiene solo las cosas que vienen de fábrica". – user456584

+0

¡Me salvaste! Gracias –

2

Cuando trató de correr psql -d template0 -c 'create extension hstore;' (en @ respuesta de Connor) Tengo el error:

psql: FATAL: database "template0" is not currently accepting connections

En lugar de eso siguió el procedimiento de this blog post que implica la actualización de template1 lugar.

1) Crear archivo “hstore.sql” que contiene:

CREATE EXTENSION hstore; 

2) Ejecutar:

psql -f /usr/local/Cellar/postgresql/9.2.1/share/postgresql/extension/hstore.sql -d template1

sospecho que esto también habría trabajado (pero no lo hice probarlo):

psql -d template1 -c 'create extension hstore;'

(Para ver los diferentes permisos de escritura entre template0 y template1 Seguí this article)

1

Para resolver el error FATAL y permitir template0 para aceptar conexiones, ejecute lo siguiente:

UPDATE pg_database SET datallowconn = TRUE WHERE datname = 'template0';

+0

Esto solucionó mi problema inmediato, pero provocó que 'pg_upgrade' fallara más adelante: tenga cuidado cuando llegue el momento de actualizar. – vaughan

1

Para Heroku

heroku pg:psql --app YOUR_APP_NAME 

y luego ejecutar

CREATE EXTENSION hstore; 
Cuestiones relacionadas