2012-09-22 15 views
6

Wenn in Postgresql 9.2 in einer Rails 3.2 App hstore, ich einen Fehler bekam beschweren wie folgt, wenn meine Testdatenbank Rech:Fehler mit Rails Testdatenbank mit Postgres mit hstore

PG :: Fehler: ERROR: Typ " hstore "existiert nicht

Da es aus dem Schema erstellt wurde, ging die Testdatenbank nicht über die Hstore CREATE EXTENSION-Migration der Entwicklungsdatenbank. Dies verursachte den Fehler auf dem Rake db: test: prepare.

Wie behebt man das? Ich habe tatsächlich eine Lösung gefunden, glücklich, mehr zu hören.

Antwort

11

Ich habe einfach meine Postgresql-Datenbank aktiviert, um hstore standardmäßig zu unterstützen (indem ich die Template-Datenbank hstore unterstütze). Führen Sie dazu den folgenden Befehl aus:

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

Dann wird jeder Rails-Test db automatisch die Erweiterung unterstützen.

+2

Für mich, 'psql -d template1 -c 'erstellen Erweiterung hstore;'' hat den Trick (Postgres 9.1). Laut einem Beitrag auf PostgreSQL.org, "Template0 ist die 'leere' pgsql Datenbank Vorlage , die nur die Dinge enthält, die out-of-the-Box kommen." – user456584

+0

Du hast mich gerettet! Danke –

2

Als ich versuchte, psql -d template0 -c 'create extension hstore;' zu laufen (in @ Connors Antwort) Ich habe die Fehlermeldung anzeigt:

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

Stattdessen folgte ich das Verfahren in this blog post die anstelle beinhaltet die Aktualisierung template1.

1) Erstellen Sie Datei „hstore.sql“ enthält:

CREATE EXTENSION hstore; 

2) Führen Sie es:

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

Ich vermute, dass dies auch funktioniert hätte (aber ich habe nicht versuchen sie es):

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

(Um die verschiedenen Schreibberechtigungen zwischen template0 und template1 sehe ich folgte this article)

1

die FATAL Fehler zu lösen und ermöglichen template0 Verbindungen zu akzeptieren, führen Sie die folgenden Schritte aus:

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

+0

Dies behebt mein unmittelbares Problem, aber verursacht 'pg_upgrade', um später zu versagen - seien Sie vorsichtig, wenn die Zeit für ein Upgrade kommt. – vaughan

1

Für Heroku

heroku pg:psql --app YOUR_APP_NAME 

und führen

CREATE EXTENSION hstore; 
Verwandte Themen