本文说明如何修改PostGIS已存在数据的几何类型。以Point类型修改为MultiPoint类型举例说明。
主要使用表达式 ALTER TABLE DDL实现。
要将Point转换为MultiPoint几何体,使用 ST_Multi:
ALTER TABLE my_table
ALTER COLUMN geom TYPE geom(MultiPoint,4326) USING ST_Multi(geom);
要将multi-part转换为single-part,操作更加复杂。因为你只能使用单一要素,而忽略所有其他要素(如果存在)。请先检查数据,看看是否有包含多个要素的几何体:
SELECT COUNT(CASE WHEN ST_NumGeometries(geom) > 1 THEN 1 END) AS multi_geom,
COUNT(geom) AS total_geom
FROM my_table;
如果发现 multi_geom 大于 0,则存在数据丢失的风险,建议将其保留为多部分几何体。如果显示 0,则可以安全地将其转换为单要素几何体:
ALTER TABLE my_table
ALTER COLUMN geom TYPE geom(Point,4326) USING ST_GeometryN(geom, 1);