在 Rails 3.2 应用程序中的 Postgresql 9.2 中使用 hstore 时,我在搜索测试数据库时收到如下错误消息:
PG::Error: 错误: 类型“hstore”不存在
由于它是从模式构建的,因此测试数据库没有经过开发数据库的 hstore CREATE EXTENSION 迁移。这导致了 rake db:test:prepare 上的错误。
如何解决这个问题?我实际上发现了一个修复,很高兴听到更多。
在 Rails 3.2 应用程序中的 Postgresql 9.2 中使用 hstore 时,我在搜索测试数据库时收到如下错误消息:
PG::Error: 错误: 类型“hstore”不存在
由于它是从模式构建的,因此测试数据库没有经过开发数据库的 hstore CREATE EXTENSION 迁移。这导致了 rake db:test:prepare 上的错误。
如何解决这个问题?我实际上发现了一个修复,很高兴听到更多。
我只是让我的 postgresql 数据库默认支持 hstore(通过让模板数据库支持 hstore)。运行以下命令来执行此操作:
psql -d template0 -c 'create extension hstore;'
然后任何 Rails 测试数据库都会自动支持扩展。
当我尝试运行时psql -d template0 -c 'create extension hstore;'
(在@Connor 的回答中)出现错误:
psql: FATAL: database "template0" is not currently accepting connections
相反,我遵循了这篇博客文章中的过程,其中涉及更新 template1。
1) 创建文件“hstore.sql”,其中包含:
CREATE EXTENSION hstore;
2)运行它:
psql -f /usr/local/Cellar/postgresql/9.2.1/share/postgresql/extension/hstore.sql -d template1
我怀疑这也会起作用(但我没有尝试过):
psql -d template1 -c 'create extension hstore;'
(要查看 template0 和 template1 之间的不同写入权限,我遵循了这篇文章)
要解决FATAL
错误并允许 template0 接受连接,请执行以下操作:
UPDATE pg_database SET datallowconn = TRUE WHERE datname = 'template0';
对于Heroku
heroku pg:psql --app YOUR_APP_NAME
然后运行
CREATE EXTENSION hstore;