Topology - toTopoGeom causes segmentation fault and database restart

Michal Seidl michal.seidl at gmail.com
Wed Jun 18 02:36:29 PDT 2025


Hello,
we use postgis topology for storing and updating quite complicated 
polygons representing roads.

Sometimes inserting new polygon into topology causes exceptions (whis is 
not nice but acceptable, I can see there is plan to add some more 
usefull message https://trac.osgeo.org/postgis/ticket/5889) but 
sometimes it completely shut down server which is quite bad as there are 
other live databases on server.

The error is cause by our function jt_to_topo_geom() which is just 
wrapper about toTopoGeom(). The inserted MultiPolygon geometry is quite 
large but postgis valid with reasonable vertices. I have suspicion there 
is conflict with data already inserted into topology, but have no idea 
where due to not info from log.

Postgis:

POSTGIS="3.4.2 c19ce56" [EXTENSION] PGSQL="140" GEOS="3.9.0-CAPI-1.16.2" 
PROJ="7.2.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org 
USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db" 
LIBXML="2.9.10" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 
(Internal)" TOPOLOGY

The code of function:

CREATE OR REPLACE FUNCTION unis_emh.jt_to_topo_geom(
	dst_schema character varying,
	dst_table character varying,
	dst_column character varying,
	geom geometry)
     RETURNS topogeometry
     LANGUAGE 'plpgsql'
     COST 100
     VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
	layer_ layer;
	topology_ topology;
BEGIN
	-- get names
	SELECT * FROM FindLayer(dst_schema, dst_table, dst_column) INTO layer_;
	SELECT * FROM FindTopology((layer_).topology_id) INTO topology_;

	-- insert geometry, no duplicate protection
	RETURN toTopoGeom(geom, (topology_).name, (layer_).layer_id);
END;
$BODY$;

Database log:

2025-06-17 17:41:46.509 CET [2414906] LOG:  server process (PID 2415005) 
was terminated by signal 11: Segmentation fault
2025-06-17 17:41:46.509 CEST [2414906] DETAIL:  Failed process was 
running: INSERT INTO "j_pmh_topo_geometrie" ("id_geometrie", "topo_geom")
                                     SELECT "id_geometrie", 
"unis_emh"."jt_to_topo_geom"(current_schema::text, 
'j_pmh_topo_geometrie', 'topo_geom', "geom")
                                     FROM "j_pmh_geometrie"
                                     WHERE "id_geometrie"=63855
2025-06-17 17:41:46.509 CEST [2414906] LOG:  terminating any other 
active server processes
2025-06-17 17:41:46.513 CEST [2414906] LOG:  all server processes 
terminated; reinitializing
2025-06-17 17:41:46.625 CEST [2415006] LOG:  database system was 
interrupted; last known up at 2025-06-17 17:40:42 CEST
2025-06-17 17:41:46.896 CEST [2415006] LOG:  database system was not 
properly shut down; automatic recovery in progress
2025-06-17 17:41:46.917 CEST [2415006] LOG:  redo starts at 14F/64BCDA20
2025-06-17 17:41:46.927 CEST [2415006] LOG:  unexpected pageaddr 
14F/20000000 in log segment 000000010000014F00000065, offset 0
2025-06-17 17:41:46.927 CEST [2415006] LOG:  redo done at 14F/64FFFFC0 
system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.01 s
2025-06-17 17:41:47.021 CEST [2414906] LOG:  database system is ready to 
accept connections

MS.


More information about the postgis-users mailing list