Estou executando a seguinte consulta no Postgres 10.3/Postgis 2.4:
create table table_c as (
select A.*, B.area_name, B.id
from table_a A
left join table_b B
on ST_Contains(A.geom, B.geom)
);
que falha com um enigmático:
ERROR: GEOSContains: TopologyException: side location conflict at -2.0889721121124643 53.528652265475735
devido ao Postgis (e bibliotecas usadas relativas).
Existe uma maneira de pular casos excepcionais e manter a consulta em execução até terminar?
Você pode envolver a função PostGIS
ST_Contains()
em uma função plpgsql (ou outra PL) de sua preferência e capturar a exceção lá. Curti:Isso retorna
FALSE
em vez de gerar um erro. Você pode querer voltarNULL
em vez disso. Mesmo efeito em sua consulta.E use isso em vez de
ST_Contains()
na sua consulta:Esquema-qualifique o nome da função na definição da função (e na chamada) para remover a dependência no caminho de pesquisa:
Não tenho certeza sobre as implicações no desempenho (especialmente no uso do índice); não testei.
Acho que a melhor maneira é filtrar a consulta ou prefixar os dados usando comandos como:
ST_IsValidReason, ST_IsValid, ST_MakeValid.
http://postgis.refractions.net/docs/ST_IsValidReason.html