2

場所を意識した新しい会場を作成しようとすると、次のエラーが発生します。

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

移行時に、t.point:latlonに:geographic=>trueプロパティを設定しなかったことに気づきました。それが私の問題の原因でしょうか?もしそうなら、すでにデータが含まれている列でそのフラグをtrueに設定するにはどうすればよいですか?

4

2 に答える 2

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を使用することもできます。

于 2012-07-11T19:22:26.900 に答える
1

SRIDを設定する最も簡単な方法は、WKTの前にEWKT(拡張Well-Known Text)を付けることです。

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

SRID = 4326を使用しています。これは、典型的なWGS84の緯度/経度座標があるように見えるためです。

于 2012-07-13T03:56:41.583 に答える