¿Dónde puedo encontrar los códigos de error de PostGIS?

8

Usar ST_Containsen la wherecláusula a veces me da mensajes de error como

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

Por ahora no puedo garantizar la validez de cada geometría en DB, usando herramientas de importación de terceros, así que solo capturo cada excepción:

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;

Me gustaría saber dónde pertenecen realmente excepciones como TopologyException y qué condiciones de excepción debo usar en lugar de OTHERS.

Utgarda
fuente

Respuestas:

3

Suponiendo que puede reproducir el error, puede obtener el código de error exacto usted mismo con bastante facilidad:

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;
$$

(Ponga sus geometrías reales, por supuesto).

Al ejecutar esto, se imprimirá el código y el mensaje de error.

No estaba haciendo ST_Contains, pero como ejemplo, obtuve este resultado de un particular con el TopologyExceptionque me encuentro:

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

La lista de códigos de error de PostgreSQL dice que XX000es "internal_error". Mi mejor conjetura es que este es solo el código que PostgreSQL usa cuando explota código nativo aleatorio de terceros, ya que PostgreSQL no puede hacer mucho con esos errores. Puede valer la pena entrar en la lista de correo de PostGIS y ver si pueden hacer algo para al menos dar a los errores generales de PostGIS un código más específico.

jpmc26
fuente