ST_GeomFromGeoJSON () Verursacht einen Absturz von Postgres

7

Ich stoße auf ein seltsames Problem, das ich nicht lösen kann. Der Server stürzt ab, wenn einige Postgis-bezogene Abfragen ausgeführt werden. Nach einigem Debuggen anhand der von postgis bereitgestellten Beispiele scheint die Funktion den Server zum Absturz zu bringen.ST_GEOMFROMGeoJSON()

Stürzt ab:

SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;

Funktioniert normal:

SELECT ST_AsText(
         ST_Transform(
               ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
                                         743265 2967450,743265.625 2967416,743238 2967416))',2249)
         ,4326)
        ) As wgs_geom; 

Wenn ich in das Protokoll schaue, finde ich diese Einträge im Zusammenhang mit dem Absturz:

2014-11-21 11:27:46 CET LOG:  server process (PID 2377) was terminated by signal 11: Segmentation fault
2014-11-21 11:27:46 CET DETAIL:  Failed process was running: SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
2014-11-21 11:27:46 CET LOG:  terminating any other active server processes
2014-11-21 11:27:46 CET WARNING:  terminating connection because of crash of another server process
2014-11-21 11:27:46 CET DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
2014-11-21 11:27:46 CET HINT:  In a moment you should be able to reconnect to the database and repeat your command.
2014-11-21 11:27:46 CET LOG:  all server processes terminated; reinitializing
2014-11-21 11:27:46 CET LOG:  database system was interrupted; last known up at 2014-11-21 11:24:11 CET
2014-11-21 11:27:46 CET LOG:  database system was not properly shut down; automatic recovery in progress
2014-11-21 11:27:46 CET LOG:  record with zero length at 18/34BCAD4
2014-11-21 11:27:46 CET LOG:  redo is not required
2014-11-21 11:27:46 CET LOG:  database system is ready to accept connections
2014-11-21 11:27:46 CET LOG:  autovacuum launcher started

Das Durchsuchen des Webs ergab keine Lösung. Vielleicht suche ich nicht nach dem richtigen Problem?

Ich habe versucht, den Server neu zu starten, da das Dateisystem möglicherweise einige Fehler aufweist, ohne Ergebnisse. Der Server selbst ist eine Ubuntu 12.04-Maschine als VPS. Der Postgresql-Server ist 9.3.5 und Postgis 2.1.4

Update
Wie Craig Ringer vorgeschlagen hat, habe ich gdb verwendet, um zu sehen, was passiert, wenn der Prozess abstürzt. Dies ist die erste Ausgabe:

Program received signal SIGSEGV, Segmentation fault.
0xb70dda59 in _IO_vfprintf_internal (s=0xbfde7150, format=<optimized out>,  ap=0xbfde7298 "") at vfprintf.c:1630
1630    vfprintf.c: No such file or directory.

Auch dies ist die Ausgabe von postgis_full_verion():

POSTGIS="2.1.4 r12966" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" 
GDAL="GDAL 1.9.0, released 2011/12/29" LIBXML="2.7.8" 
LIBJSON="UNKNOWN" TOPOLOGY RASTER

Habe ich Recht zu sagen, dass etwas nicht stimmt vfprintf.c? zB existiert es nicht?

Es heißt LIBJSON = "UNBEKANNT" könnte das von Einfluss sein?

stUrb
quelle
1
Wenn es reproduzierbar ist, versuchen Sie, eine Rückverfolgung zu erhalten. wiki.postgresql.org/wiki/… . Versuchen Sie nach Möglichkeit auch, die Abfrage auf die kleinste zu reduzieren, die den Fehler noch verursacht.
Craig Ringer
1
Der Absturz ist reproduzierbar; und die Basis, die den Prozess zum Absturz bringt, ist die ST_GeomFromGeoJSONFunktion. Ich habe die Ergebnisse von gdb im Moment des Absturzes hinzugefügt.
stUrb
1
Sie sollten einen Fehlerbericht an trac.osgeo.org/postgis/newticket
Josh Kupershmidt
1
Alles
stUrb

Antworten:

1

Vom Osgeo-Ticket

Die Wurzel unseres unser Crash - Problem war Bibliothek Versionskonflikt. Das Build-System verwendete 0,9, aber ich stellte es auf einem System mit 0,11 bereit. Die RPM-Pakete haben ihre Anforderung nur als "json-c" ohne Versionsspezifität deklariert. Anscheinend ist json nicht binärkompatibel vorwärts, daher sollten Paketierer aufpassen: Sie müssen Ihre json-c-Version in Ihre Paketabhängigkeitserklärungen einbinden.

gefolgt von

Resolution set to invalid
Status changed from new to closed
Closing because this is a build problem.
Evan Carroll
quelle