[postgis-users] Query crashes Postgres?
Luca Bertoncello
lucabert at lucabert.de
Tue Jan 26 23:31:36 PST 2021
Hi list!
After about one months I got all Europe's data from OSM imported.
Now I needed to create some help tables, so I fired these queries:
CREATE TABLE city_admin_boundaries AS
SELECT
NEXTVAL('city_admin_boundaries_seq') AS id,
planet_osm_polygon.way,
planet_osm_polygon.admin_level,
planet_osm_point.name,
planet_osm_point.place,
CASE
WHEN (planet_osm_point.tags->'population' ~ '^[0-9]{1,8}$') THEN
(planet_osm_point.tags->'population')::INTEGER ELSE 0
END as population,
(ST_Area(ST_Transform(planet_osm_polygon.way, 4326)::geography) /
1000000) AS km2
FROM planet_osm_polygon
JOIN (
SELECT name, MAX(admin_level) AS al
FROM planet_osm_polygon
WHERE boundary = 'administrative' AND admin_level IN ('4', '6', '8')
AND osm_id < 0 GROUP BY name
) size USING(name)
JOIN planet_osm_point USING (name)
WHERE planet_osm_polygon.boundary = 'administrative' AND
planet_osm_polygon.admin_level = size.al AND
(
(
planet_osm_polygon.admin_level IN ('6', '8') AND
planet_osm_point.place IN ('city', 'town')
) OR
(
planet_osm_polygon.admin_level = '4' AND
planet_osm_point.place = 'city'
)
) AND
planet_osm_polygon.osm_id < 0;
CREATE TABLE city_boundaries AS
SELECT NEXTVAL('city_boundaries_seq') AS id,
ST_CollectionExtract(unnest(ST_ClusterWithin(planet_osm_polygon.way,
200)), 3)::geometry(MultiPolygon, 3857) as way
FROM planet_osm_polygon, city_admin_boundaries
WHERE landuse IN ('residential', 'retail', 'retail;residential',
'commercial', 'school', 'university', 'industrial',
'asphalt', 'cemetery', 'civic', 'civic_admin',
'concrete_surface', 'construction', 'education',
'educational', 'institutional', 'village') AND
ST_Within(planet_osm_polygon.way, city_admin_boundaries.way)
AND
(
(city_admin_boundaries.admin_level = '4' AND km2 >= 100)
OR
(
population > 18000 AND
(
(city_admin_boundaries.admin_level = '6' AND km2 >=
50) OR
(city_admin_boundaries.admin_level = '8' AND km2 >=
25)
)
) OR
(
population > 10000 AND city_admin_boundaries.admin_level
= '8' AND km2 >= 100
)
);
ALTER TABLE city_boundaries OWNER TO _renderd;
DELETE FROM city_boundaries WHERE ST_Area(ST_Buffer(way, -50)) < 50;
UPDATE city_boundaries SET way =
ST_Makevalid(ST_Multi(ST_Buffer(ST_Buffer(way, 300, 'join=miter'), -300,
'join=miter')));
The table were created successfully (13828 rows the first, 108385 the
seconds). The "DELETE" worked successfully, too, but on the UPDATE the
process crashes...
In PostgresSQL log I find:
2021-01-27 07:06:02.165 CET [582] LOG: Serverprozess (PID 10391) wurde
von Signal 9 beendet: Getötet
2021-01-27 07:06:02.165 CET [582] DETAIL: Der fehlgeschlagene Prozess
führte aus: UPDATE city_boundaries SET way =
ST_Makevalid(ST_Multi(ST_Buffer(ST_Buffer(way, 300, 'join=miter'), -300,
'join=miter')));
2021-01-27 07:06:02.178 CET [582] LOG: aktive Serverprozesse werden
abgebrochen
2021-01-27 07:06:02.179 CET [10238] postgres at gis WARNUNG: Verbindung
wird abgebrochen wegen Absturz eines anderen Serverprozesses
2021-01-27 07:06:02.179 CET [10238] postgres at gis DETAIL: Der Postmaster
hat diesen Serverprozess angewiesen, die aktuelle Transaktion
zurückzurollen und die Sitzung zu beenden, weil ein anderer
Serverprozess abnormal beendet wurde und möglicherweise das Shared
Memory verfälscht hat.
2021-01-27 07:06:02.179 CET [10238] postgres at gis TIPP: In einem Moment
sollten Sie wieder mit der Datenbank verbinden und Ihren Befehl
wiederholen können.
2021-01-27 07:06:02.180 CET [10234] WARNUNG: Verbindung wird
abgebrochen wegen Absturz eines anderen Serverprozesses
2021-01-27 07:06:02.180 CET [10234] DETAIL: Der Postmaster hat diesen
Serverprozess angewiesen, die aktuelle Transaktion zurückzurollen und
die Sitzung zu beenden, weil ein anderer Serverprozess abnormal beendet
wurde und möglicherweise das Shared Memory verfälscht hat.
2021-01-27 07:06:02.180 CET [10234] TIPP: In einem Moment sollten Sie
wieder mit der Datenbank verbinden und Ihren Befehl wiederholen können.
2021-01-27 07:06:02.997 CET [582] LOG: alle Serverprozesse beendet;
initialisiere neu
2021-01-27 07:06:03.208 CET [10410] LOG: Datenbanksystem wurde
unterbrochen; letzte bekannte Aktion am 2021-01-27 07:01:27 CET
2021-01-27 07:06:03.208 CET [10411] postgres at gis FATAL: das
Datenbanksystem ist im Wiederherstellungsmodus
2021-01-27 07:06:03.786 CET [10410] LOG: Datenbanksystem wurde nicht
richtig heruntergefahren; automatische Wiederherstellung läuft
2021-01-27 07:06:03.937 CET [10410] LOG: Redo beginnt bei 11F/22E1D520
2021-01-27 07:06:04.317 CET [10410] LOG: ungültige Datensatzlänge bei
11F/24124828: 24 erwartet, 0 erhalten
2021-01-27 07:06:04.317 CET [10410] LOG: Redo fertig bei 11F/241247F0
2021-01-27 07:06:05.597 CET [582] LOG: Datenbanksystem ist bereit, um
Verbindungen anzunehmen
Of course, I didn't killed the query...
I think, the problem could be "ungültige Datensatzlänge bei
11F/24124828: 24 erwartet, 0 erhalten" (invalid data length...).
The same query fired on a test server with just data from Saxony,
Brandenburg and Czeck Republic worked fine.
Could someone help me to solve the problem?
Thanks
Luca Bertoncello
(lucabert at lucabert.de)
More information about the postgis-users
mailing list