如何为混合几何类型(多边形&多多边形)转换为SRID 4326的geometry类型?
解决方法
当几何列同时包含Polygon和MultiPolygon类型时,不能用单一的Polygon类型约束,也不能只指定SRID而省略几何类型。以下两种方式可以解决报错:
方法1:使用ST_SetSRID函数设置SRID
这个函数会保留原有几何类型,同时明确赋予SRID:
CREATE MATERIALIZED VIEW published.ql_cmd_cruise_layer_web TABLESPACE pg_default AS SELECT ql_cmd_cruise_layer_web.cruise_id, ql_cmd_cruise_layer_web.cruise, ST_SetSRID(ql_cmd_cruise_layer_web.shape_wgs84, 4326) AS shape_wgs84, ql_cmd_cruise_layer_web.cruise_data_url FROM oracle_fdw.ql_cmd_cruise_layer_web WITH DATA;
方法2:使用通用几何类型Geometry指定SRID
用Geometry作为父类型,兼容Polygon和MultiPolygon:
CREATE MATERIALIZED VIEW published.ql_cmd_cruise_layer_web TABLESPACE pg_default AS SELECT ql_cmd_cruise_layer_web.cruise_id, ql_cmd_cruise_layer_web.cruise, ql_cmd_cruise_layer_web.shape_wgs84::geometry(Geometry, 4326) AS shape_wgs84, ql_cmd_cruise_layer_web.cruise_data_url FROM oracle_fdw.ql_cmd_cruise_layer_web WITH DATA;
报错原因
PostgreSQL的几何类型转换语法要求必须同时指定几何类型和SRID(或者只指定类型),仅写::geometry(4326)不符合语法规则,因此触发Invalid geometry type modifier错误。
内容的提问来源于stack exchange,提问作者Edward Lewis
相关产品推荐
相关产品推荐

