Mam bazę danych postgresql z postGIS i używam framework entity z dotconnect 6.7 dla postgreSQL.Postgresql z postGIS i strukturą encji, problem ograniczenia CHECK
Z poniższej tabeli w mojej bazy danych:
CREATE TABLE geo
(
the_geom geometry,
id integer NOT NULL,
CONSTRAINT primary_key PRIMARY KEY (id),
CONSTRAINT enforce_srid_geometry CHECK (st_srid(the_geom) = 4326)
)
i uruchomiony następujący kod
class Program {
static void Main(string[] args) {
using (test_Model.test_Entities ctx = new test_Model.test_Entities()) {
var geom = new test_Model.geo();
geom.id = 0;
geom.the_geom = DbGeometry.PointFromText("POINT (1 1)", 4326).AsBinary();
ctx.geos.AddObject(geom);
ctx.SaveChanges();
}
}
następujące ograniczenia zawodzi w bazie
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
ciekawa jaką wartość baza danych zarejestrowana, próbowałem mieć następujące dwa ograniczenia
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) > 4326)
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) < 4326)
Żaden nie zadziałał. Ponieważ są to wartości całkowite, które są porównywane, co najmniej jedno z ostatnich trzech zapytań powinno być prawdziwe.
Po pewnym czasie okazało się, że następujące ograniczenie pozwala mi wkładać coś z SRID = 4326 do tabeli
st_srid(the_geom) <= 4326)
ale wydaje się akceptować wszystko, zarówno większych i mniejszych srids, z jakiegoś powodu.
Czy jest to błąd w postgresql, encji framework lub dotconnect?
Edit: Zapytanie
SELECT st_srid(the_geom) FROM geo WHERE geo.id == 0
zwraca SRID 0. Tak więc, bez względu na to, co Srid daję określić w ramach podmiotu, wydaje się jako 0 w bazie danych. Co się dzieje?
'postgresql 6.7'? [Nawet nie istnieje.] (Http://www.postgresql.org/support/versioning/) A może to jest to, że dotconnect 6.7? Więc jakie są wersje Postgres i PostGis? –
Naprawiono sformułowanie. PostgreSQL 9.2.4 i PostGis 2.0.3 r11132. – user1815201
Cóż, przynajmniej na postgresql 9.1 i postgis 1.5, widzimy st_srid = 4326; chciałbyś użyć rejestrowania zapytań i zobaczyć, co jest wypluwane przez dotconnect –