【发布时间】:2012-10-04 03:08:17
【问题描述】:
我有一个带有名为 shape 的多边形列的 postgres 表。为了确定一个点是否在里面,我跑了
select * from areas where shape @> point '(1,1)';
这一切都很好,可以在我的 ruby on rails 应用程序中运行,但在我的 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 多个测试都可以工作,只有这一个可以使用。它再次在代码和控制台中工作。测试环境全部设置妥当。
我的问题: - 我怎样才能使比较对象起作用? - 为什么它只会在测试中失败?
【问题讨论】:
-
您是否不小心在测试环境中使用了不同类型的数据库(例如 mysql)?
-
@DavidGrayson:
PGError表示 PostgreSQL,所以我认为这不是问题所在。 -
>您的测试数据库中是否加载了所有必需的 PostgreSQL 扩展?我没有为此做任何具体的事情。它是一种简单的几何类型,不需要对我的知识进行任何扩展。
-
从多边形(形状)@>点'(1,1)'的区域中选择*;多边形演员修复了它。然后我发现在我的测试数据库中,列的形状是字符串。这就是为什么它抱怨形状。所以我放弃了我的数据库,运行 rake db:dump 来创建 schema.rb,我的多边形类型又是字符串。我怎样才能让它知道多边形?在数据库中列肯定是多边形的。
标签: ruby-on-rails postgresql rspec