Où puis-je trouver les codes d'erreur PostGIS?

8

L'utilisation ST_Containsde la whereclause in me donne parfois des messages d'erreur comme

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

Pour l'instant, je ne peux pas garantir la validité de chaque géométrie dans la base de données, en utilisant des outils d'importation tiers, je détecte donc toutes les exceptions:

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;

Je voudrais savoir où appartiennent vraiment les exceptions comme TopologyException et quelles conditions d'exception dois-je utiliser à la place OTHERS?

Utgarda
la source

Réponses:

3

En supposant que vous pouvez reproduire l'erreur, vous pouvez obtenir le code d'erreur exact vous-même assez facilement:

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

(Mettez vos géométries réelles, bien sûr.)

L'exécution de ceci imprimera le code et le message d'erreur.

Je ne faisais pas ST_Contains, mais à titre d'exemple, j'ai obtenu ce résultat d'un particulier TopologyExceptionque je rencontre:

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 liste des codes d'erreur PostgreSQL indique que XX000c'est "internal_error". Ma meilleure supposition est que ce n'est que le code que PostgreSQL utilise lorsque du code natif aléatoire de tiers explose, car PostgreSQL ne peut pas faire grand-chose avec ces erreurs. Cela pourrait valoir la peine d'être inscrit sur la liste de diffusion PostGIS et de voir s'ils peuvent faire quelque chose pour au moins donner aux erreurs générales PostGIS un code plus spécifique.

jpmc26
la source