Al recortar los polígonos de una tabla con polígonos en otra, ST_Intersection puede devolver un conjunto de resultados que se pueden manejar con ST_Dump. Las geometrías múltiples devueltas no son necesariamente ST_Polygon sino también ST_LineString (probablemente también un punto). Entonces cuando se ejecuta una consulta
INSERT INTO c (geom)
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom));
al intentar llenar la tabla "c" con polígonos recortados, falla con ERROR: el tipo de geometría (LineString) no coincide con el tipo de columna (polígono)
Hice otra instrucción SELECT anidada para que solo aparecieran las geometrías de polígonos, como:
INSERT INTO c (geom)
(SELECT geom FROM
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom))) AS cl
WHERE ST_GeometryType(cl.geom)='ST_Polygon');
Como esto es un poco engorroso, me pregunto si hay una solución más elegante para descartar geometrías no válidas.
{}sobre la ventana de edición de Preguntas.