Postgresql Postgis允许添加无效的几何图形

Postgresql Postgis允许添加无效的几何图形,postgresql,gis,postgis,Postgresql,Gis,Postgis,我有一个表层,其中有一个几何列geom。此几何图形列具有以下约束: CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2), CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'POLYGON'::text), CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 3857) 因此,正如您所看到的,这个几何体列没有

我有一个表
,其中有一个几何列
geom
。此几何图形列具有以下约束:

 CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2),
 CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'POLYGON'::text),
 CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 3857)
因此,正如您所看到的,这个几何体列没有什么特别之处。但有趣的是,它允许我在表格中添加不正确的几何图形:

insert into layer (geom) values (
    ST_GeomFromText('POLYGON((4831087.7172221 7576170.7140277,
      4829023.9174584 7556144.212617, 
      4834450.9464667 7556602.8347867, 
      4833533.7021273 7575329.9067165, 
      4831087.7172221 7576170.7140277),
     (4815647.4375453 7566616.0854925, 
      4817864.1113651 7574183.3512927, 
      4825049.1920219 7573342.5439816, 
      4821609.5257499 7567609.7668602, 
      4815647.4375453 7566616.0854925))', 3857)
);
问题是这不是一个有“洞”的多边形。这是两个分开的不同多边形。为什么呢?为什么Postgis允许添加不正确的几何图形

编辑


我用
ST\u IsValid
检查了这个几何体,结果是假的。所以,这看起来就像Postgis中的一个bug。

您可以从任何闭合线创建多边形,如

ST_GeomFromText('POLYGON((0 0, 0 1, 1 0, 1 1, 0 0))')
即使这不是一个有效的多边形


st\u isvalid()
函数使用检查约束

谢谢!一个小问题:这个约束在表模式中应该是什么样子?类似于
约束强制执行有效几何检查(st\u isvalid(geom))
?这是设计的,不是bug。存在无效的几何图形,必须以某种方式存储并理想地固定。如果不希望它们出现在表中,请添加一个检查约束(正如我在注释中看到的那样)。