Convert polygon with filled region inside hole into multiple polygons

I'm not sure if I understood your question correctly, but judging by the picture, my answer is the following,

  1. create three buffer zones of different radius from a point, for example, using part of your script

    create table buffers1 as
    SELECT
         ST_Buffer(center, 3, 3) AS geom
    FROM ST_MakePoint(0, 0) AS center;
    
  2. cut out a smaller one of your choice

    CREATE TABLE Buffers32 AS
    SELECT ST_Difference(a.geom, b.geom) AS geom
    FROM Buffers3 a, 
         Buffers2 b
    

Leave buffer 1, and the difference is buffer3 - buffer2, see figure

enter image description here...

2 method Gabriel De Luca-Cyril what you need : -)...

SELECT (ST_Dump(ST_MakeValid( 
  (SELECT
      ST_MakePolygon(
      ST_ExteriorRing(ST_Buffer(center, 10, 10)),
      ARRAY[
        ST_ExteriorRing(ST_Buffer(center, 6, 6)),
        ST_ExteriorRing(ST_Buffer(center, 3, 3))
      ]
    ))))).geom 
      FROM ST_MakePoint(0, 0) AS center; 

They are two holes. Since they overlaps, the geometry is not valid.

SELECT ST_MakeValid( 
  (SELECT
    ST_MakePolygon(
      ST_ExteriorRing(ST_Buffer(center, 10, 10)),
      ARRAY[
        ST_ExteriorRing(ST_Buffer(center, 6, 6)),
        ST_ExteriorRing(ST_Buffer(center, 3, 3))
      ]
    ) AS geom
  FROM ST_MakePoint(0, 0) AS center
  )
);  

Returns a multipolygon, one part with the exterior and the hole, and other part with the island ("nested hole" can be a more precise term).

Tags:

Postgis