Код: Выделить всё
CREATE TABLE tmp (
id int GENERATED BY DEFAULT AS IDENTITY,
geom GEOMETRY
);
INSERT INTO tmp (geom)
SELECT geom
FROM (VALUES ('POLYGON ((10 9, 10 10, 11 10, 11 9, 10 9))'::geometry),
('MULTIPOLYGON (((-1 8, -1 -5, -1.5 -5, -1.5 8, -1 8)), ((-4 7, -2 7, -2 4, -4 4, -4 7)))'::geometry),
('POLYGON ((-4.5 2.5, -8 2.5, -8 4, -4.5 4, -6 3.25, -4.5 2.5))'::geometry),
('POLYGON ((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry),
('POLYGON ((8 8, 8 13, 12 13, 12 8, 8 8))'::geometry),
('POLYGON ((10 11, 10 12, 11 12, 11 11, 10 11))'::geometry),
('MULTIPOLYGON (((-8 2, -7 2, -7 1, -8 1, -8 2)), ((-4 2, -3 2, -3 1, -4 1, -4 2)))'::geometry),
('POLYGON ((-5 0, -5 5, 0 5, 0 0, -5 0))'::geometry),
('POLYGON ((2 3, 2 7, 7 7, 7 3, 2 3))'::geometry),
('POLYGON ((-4 4, -4 7, -2 7, -2 4, -4 4))'::geometry)
) AS st (geom);
SELECT row_number() OVER() AS idgrid, squares.geom AS geom_grid
FROM tmp AS pts
INNER JOIN
ST_HexagonGrid(6, pts.geom) AS squares
ON ST_Intersects(pts.geom, squares.geom)
GROUP BY squares.geom;