关系“场地”的新行违反了检查约束“enforce_srid_latlon”

时间:2012-07-11 19:18:49

标签: ruby-on-rails ruby-on-rails-3 postgresql postgis

当我尝试创建一个可识别位置的新场所时,我收到以下错误。

ActiveRecord::StatementInvalid: PG::Error: ERROR:  new row for relation "venues" violates check constraint "enforce_srid_latlon"

这是我重新创建错误的方法。

v = Venue.create(:latlon => "POINT (43.245332 -85.4352332)")
v.save

我注意到在我的迁移中,我没有设置:geographic => t.point的真正属性:latlon。这可能是导致我的问题的原因吗?如果是这样,如何在已包含数据的列上将该标志设置为true?

2 个答案:

答案 0 :(得分:3)

正如(Postgres)错误消息所示,新行将违反检查约束enforce_srid_latlon

查看检查约束的定义,您将得到答案。 在 psql 中,您可以使用:

\d venues

或者您可以从任何客户端使用此 SQL查询

SELECT r.conname, pg_catalog.pg_get_constraintdef(r.oid, true)
FROM   pg_catalog.pg_constraint r
WHERE  r.conrelid = 'venues'::regclass
AND    r.contype = 'c'
ORDER  BY 1;

或者您可以使用pgAdmin之类的GUI。

答案 1 :(得分:1)

设置SRID的最简单方法是将WKT添加到EWKT(扩展的已知文本)中:

v = Venue.create(:latlon => "SRID=4326;POINT (43.245332 -85.4352332)")

我正在使用SRID=4326,因为看起来你有WGS84纬度/经度坐标,这是典型的。