Eu tenho uma visão openstreetmapview que combina duas tabelas com colunas diferentes. A primeira tabela é openstreetmap e a segunda é B.
Quando eu executo esta query na view:
select this_.gid as y0_
, this_.openstreetmapId as y1_
, this_.name as y2_
, this_.streetType as y3_
, this_.oneWay as y4_
, this_.location as y5_
, this_.isIn as y6_
, this_.countryCode as y7_
, length as y8_
, distance_sphere(
GeometryFromText(
'POINT(11.059734344482422 46.07373046875)',4326)
, ST_line_interpolate_point(
this_.shape
, st_line_locate_point(
this_.shape
, GeometryFromText('POINT(11.059734344482422 46.07373046875)', 4326)
)
)
) as y9_
, ST_AsText(ST_ClosestPoint(
this_.shape,GeometryFromText( 'POINT(11.059734344482422 46.07373046875)', 4326)
)) as y10_
from OpenStreetMapView this_ ;
Então, recebo cerca de 50 mil resultados. Quando executo a mesma consulta na tabela, embora a tabela tenha a mesma coluna que a consulta precisa, ela retorna 0 linhas. Por que é que?
Eu uso banco de dados PostgreSQL 8.4 e PostGIS.
Como você não tem absolutamente nenhuma cláusula de filtragem (nenhuma
WHERE
cláusula ouJOIN
s que filtraria as linhas da tabela base), a única razão pela qual você deve obter zero linhas dessa consulta é que não há nenhuma linha na tabela para ela retornar.SELECT COUNT(*) FROM OpenStreetMapView
irá confirmar ou contradizer isso.Se um processo que deveria ter preenchido a tabela ainda não foi concluído, outras transações podem não conseguir ver os dados ainda (até que a transação seja concluída), embora eu acredite que, neste caso, o bloqueio padrão e as configurações de isolamento da transação causariam um erro ser levantado ou um sono a ser imposto para a consulta de verificação até que o outro processo seja concluído (em vez de retornar nada).