使用 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