在测试环境中未启用Postgresql扩展

时间:2012-10-04 03:08:17

标签: ruby-on-rails postgresql rspec

我有一个postgres表,其中包含一个名为shape的多边形列。为了确定一个点是否在我内部运行

select * from areas where shape @> point '(1,1)';

这一切都很好并且在我的ruby on rails app上工作,但它在我的RSpec测试中失败了。当我查看我的日志时,我发现此错误为源

 PGError: ERROR:  operator does not exist: character varying @> point
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

使用数据库工作的所有其他50多个测试,只有这一个保释。它再次适用于代码和控制台。测试环境都已正确设置。

我的问题: - 我如何投射比较科目? - 为什么它只会在测试中失败?

2 个答案:

答案 0 :(得分:5)

默认情况下,activerecord使用schema.rb使测试数据库与开发数据库保持同步。 Schema.rb是数据库独立的(它使用与迁移相同的结构),但另一方面是它不支持数据库可能具有的所有花里胡哨,特别是像Postgres这样增加了许多额外的东西。

您可以将config.active_record.schema_format设置为:sql,而不是使用数据库自​​己的工具来生成rails将丢失的.sql文件,而不是schema.rb。您将无法针对不同的数据库运行测试,但如果您使用的是postgres特定的扩展,那么无论如何您都处于该场景中。

另一种可能性是增强活动记录的模式转储器以理解多边形列。 foreigner gem为schema.rb添加了外键支持,例如

答案 1 :(得分:1)

该错误似乎表明shape列被定义为varchar。检查以确保它是多边形。

\d areas