<div dir="ltr"><div>strk, thank you once again! I works now. I comment on your comments in line bellow and add the full code in the end, for future reference  (I couldn't find a working example in google)<br><br><pre><i>--2) Creating the more aggregated cities table and adding a topogeometry</i></pre><pre>> You're not defining a hierarchical layer here, but a primitive one. For a hierarchical one you'll want to pass an additional parameter specifying the cchild layer identifier.</pre>OK, agreed. This I created a new topogeom ('tg_cities2') with this syntax <br><br>SELECT topology.addtopogeometrycolumn('topo_AC', 'public','cities','tg_cities2','POLYGON',1);<br><br></div><div>Now contents of topology.layer table looks like this:<br><br>-- topology_id;layer_id;shcema_name;table_name;feature_column;feature_type;level;child_id<br>-- 15;1;"public";"temp_geom_ac";"tg_geom_dump_utm";3;0;NULL<br>-- 15;2;"public";"cities";"tg_cities";3;0;NULL<br>-- 15;3;"public";"cities";"tg_cities2";3;1;1<br><br></div><div>Thus the layer_id for "tg_cities2" is 3 (<br></div><div><br><br></div>-- 3) adding content to "tg_cities"<pre>Just by correcting the layed_id the previous code worked.<br><br>a) on your suggestion<br>>><i> TopoElementArray_Agg(ARRAY[(tg_geom_dump_utm).id,(tg_geom_dump_utm).layer_id])
</i>
>Here you're trying to pass a "layer_id" as the "type" of component for a non-hierarchical layer, thus the error</pre>If I understood your suggestion correctly, I should have:<br><pre><i>TopoElementArray_Agg(ARRAY[(tg_geom_dump_utm).id,3])
</i></pre>where "3" indicates the topogem type (area). This makes the code err, while keeping  <br><pre><i>TopoElementArray_Agg(ARRAY[(tg_geom_dump_utm).id,(tg_geom_dump_utm).layer_id])</i></pre>works. What is not very clear from the syntax is if the syntax of <i>TopoElementArray_Agg </i><div><div><div><div><div><div><br></div><div>should follow the child or the parent topogeom "class" (hierarquical or not)<br></div><div><br><div><br></div><div>b) I also added a WHERE clause to the subquery that creates the <i>TopoElementArray<br></i></div><div>excluding the rows where the child topogeom is missing. Theese were polygons of the original setcors shapefile that could not be loaed to the child toogem, i.e., gave an error in the toTopoGeom function. <br><br><br><br></div><div>To recap, this is the code that works:<br><br><br><pre>--1) creating the underlying topology elements, (sectors)</pre>CREATE TABLE cities AS<br>SELECT     substring(cod_set,1,7) AS cod_mun<br>FROM temp_geom_ac<br>GROUP BY substring(cod_set,1,7) <br>SELECT topology.addtopogeometrycolumn('topo_AC', 'public','cities','tg_cities2','POLYGON',1);<br><br><br><pre>--2) Creating the more aggregated cities table and adding a topogeometry<br><br>CREATE TABLE cities AS<br>SELECT     substring(cod_set,1,7) AS cod_mun<br>FROM temp_geom_ac<br>GROUP BY substring(cod_set,1,7) <br>SELECT topology.addtopogeometrycolumn('topo_AC', 'public','cities','tg_cities2','POLYGON',1);<br><br></pre><br><pre>-- 3) adding content to "tg_cities"<br><br>UPDATE cities <br>SET tg_cities2 = CreateTopogeom(<br>   'topo_AC', -- topology name<br>   3, -- indicates topogeom type is area<br> 3, -- indicates the layer id, as created by "addtopogeometrycolumn" above. Check topology.layer table if you don't know<br> foo.city_faces)<br>FROM(  SELECT  substring(cod_set,1,7) AS cod_mun, <br>           TopoElementArray_Agg(ARRAY[(tg_geom_dump_utm).id,(tg_geom_dump_utm).layer_id]) AS city_faces<br>  FROM temp_geom_ac<br>     WHERE (tg_geom_dump_utm).id IS NOT NULL -- igonres sectors that could not be loaded to the sectors topogem (tg_geom_dump_utm)<br> GROUP BY substring(cod_set,1,7) <br>     ) as foo<br>WHERE  cities.cod_mun=foo.cod_mun<br></pre><br><br></div><div><br><br></div></div></div></div></div></div></div></div>