当我尝试创建一个可识别位置的新场所时,我收到以下错误。
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?
答案 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纬度/经度坐标,这是典型的。