使用 Npgsql 选择 PostgisMultipolygon 时超时
Timeout when selecting PostgisMultipolygon with Npgsql
在这个例子中,我使用的是开发版本为 3.1.0-alpha6 的 Npgsql。
我想将 PostgisGeometry 对象指定为查询中的参数 (NpgsqlDbType.Geometry)
并再次 select 对象。
将正确返回类型为 Point、MultiPoint、LineString、MultiLineString、Polygon 和 GeometryCollection 的查询。只有一个多边形的 PostgisMultiPolygon 对象也将正确返回。
但是,它不适用于具有多个多边形的 PostgisMultiPolygon。
PostgisMultiPolygon geom1 = new PostgisMultiPolygon(new[]
{
new PostgisPolygon(new[]
{
new[]
{
new Coordinate2D(40, 40),
new Coordinate2D(20, 45),
new Coordinate2D(45, 30),
new Coordinate2D(40, 40)
}
})
}) {SRID = 4326};
PostgisMultiPolygon geom2 = new PostgisMultiPolygon(new[]
{
new PostgisPolygon(new[]
{
new[]
{
new Coordinate2D(40, 40),
new Coordinate2D(20, 45),
new Coordinate2D(45, 30),
new Coordinate2D(40, 40)
}
}),
new PostgisPolygon(new[]
{
new[]
{
new Coordinate2D(20, 35),
new Coordinate2D(10, 30),
new Coordinate2D(10, 10),
new Coordinate2D(30, 5),
new Coordinate2D(45, 20),
new Coordinate2D(20, 35)
}
})
}) {SRID = 4326};
using (NpgsqlConnection connection = CreateConnection())
{
NpgsqlCommand command = connection.CreateCommand();
command.Parameters.AddWithValue("p1", NpgsqlDbType.Geometry, geom1);
command.CommandText = "Select :p1";
command.ExecuteScalar();
}
using (NpgsqlConnection connection = CreateConnection())
{
NpgsqlCommand command = connection.CreateCommand();
command.Parameters.AddWithValue("p1", NpgsqlDbType.Geometry, geom2);
command.CommandText = "Select :p1";
command.ExecuteScalar(); //timeout occurs...
}
如果增加CommandTimeout,无论如何都会超时。
提前致谢!
此错误的修复刚刚合并:https://github.com/npgsql/npgsql/pull/1025
在这个例子中,我使用的是开发版本为 3.1.0-alpha6 的 Npgsql。
我想将 PostgisGeometry 对象指定为查询中的参数 (NpgsqlDbType.Geometry) 并再次 select 对象。
将正确返回类型为 Point、MultiPoint、LineString、MultiLineString、Polygon 和 GeometryCollection 的查询。只有一个多边形的 PostgisMultiPolygon 对象也将正确返回。
但是,它不适用于具有多个多边形的 PostgisMultiPolygon。
PostgisMultiPolygon geom1 = new PostgisMultiPolygon(new[]
{
new PostgisPolygon(new[]
{
new[]
{
new Coordinate2D(40, 40),
new Coordinate2D(20, 45),
new Coordinate2D(45, 30),
new Coordinate2D(40, 40)
}
})
}) {SRID = 4326};
PostgisMultiPolygon geom2 = new PostgisMultiPolygon(new[]
{
new PostgisPolygon(new[]
{
new[]
{
new Coordinate2D(40, 40),
new Coordinate2D(20, 45),
new Coordinate2D(45, 30),
new Coordinate2D(40, 40)
}
}),
new PostgisPolygon(new[]
{
new[]
{
new Coordinate2D(20, 35),
new Coordinate2D(10, 30),
new Coordinate2D(10, 10),
new Coordinate2D(30, 5),
new Coordinate2D(45, 20),
new Coordinate2D(20, 35)
}
})
}) {SRID = 4326};
using (NpgsqlConnection connection = CreateConnection())
{
NpgsqlCommand command = connection.CreateCommand();
command.Parameters.AddWithValue("p1", NpgsqlDbType.Geometry, geom1);
command.CommandText = "Select :p1";
command.ExecuteScalar();
}
using (NpgsqlConnection connection = CreateConnection())
{
NpgsqlCommand command = connection.CreateCommand();
command.Parameters.AddWithValue("p1", NpgsqlDbType.Geometry, geom2);
command.CommandText = "Select :p1";
command.ExecuteScalar(); //timeout occurs...
}
如果增加CommandTimeout,无论如何都会超时。 提前致谢!
此错误的修复刚刚合并:https://github.com/npgsql/npgsql/pull/1025