Wo finde ich PostGIS-Fehlercodes?

8

Die Verwendung der ST_Containsin- whereKlausel gibt mir manchmal Fehlermeldungen wie

ERROR: GEOSContains: TopologyException: side location conflict at 37.3706 55.7882

Im Moment kann ich nicht die Gültigkeit für jede Geometrie in der Datenbank mit Importwerkzeugen von Drittanbietern garantieren, daher fange ich einfach jede Ausnahme ab:

CREATE OR REPLACE FUNCTION safe_st_contains(geom1 geometry, geom2 geometry)
  RETURNS BOOL AS
  $$
  BEGIN
    RETURN ST_Contains($1, $2);
    EXCEPTION WHEN others THEN
      RAISE NOTICE 'TopologyException'; -- this is a guess
      RETURN FALSE;
  END;
  $$
LANGUAGE plpgsql;

Ich möchte wissen, wo Ausnahmen wie TopologyException wirklich hingehören und welche Ausnahmebedingungen ich anstelle von verwenden soll OTHERS.

Utgarda
quelle

Antworten:

3

Angenommen, Sie können den Fehler reproduzieren, können Sie den genauen Fehlercode ziemlich einfach selbst erhalten:

DO $$
  BEGIN
    PERFORM ST_Contains('problem 1 geom here'::GEOMETRY, 'problem geom 2 here'::GEOMETRY);
    EXCEPTION WHEN others THEN
      RAISE NOTICE 'Error code: %', SQLSTATE;
      RAISE NOTICE 'Error message: %', SQLERRM;
  END;
$$

(Geben Sie natürlich Ihre tatsächlichen Geometrien ein.)

Wenn Sie dies ausführen, werden der Code und die Fehlermeldung ausgedruckt.

Ich habe es nicht getan ST_Contains, aber als Beispiel habe ich dieses Ergebnis von einem bestimmten erhalten, auf das TopologyExceptionich stoße:

Error code: XX000
Error message: GEOSUnaryUnion: TopologyException: found non-noded intersection between LINESTRING (401336 4.79544e+06, 401336 4.79544e+06) and LINESTRING (401336 4.79544e+06, 401339 4.79543e+06) at 401336.24785627011 4795435.9978510197

Die Liste der PostgreSQL- Fehlercodes besagt, dass dies XX000"internal_error" ist. Ich gehe davon aus, dass dies nur der Code ist, den PostgreSQL verwendet, wenn zufälliger nativer Code von Drittanbietern explodiert, da PostgreSQL mit diesen Fehlern nicht allzu viel anfangen kann. Es könnte sich lohnen, in die PostGIS-Mailingliste aufgenommen zu werden und zu prüfen, ob sie etwas tun können, um zumindest allgemeinen PostGIS-Fehlern einen spezifischeren Code zu geben.

jpmc26
quelle