2014-09-16 9:29 GMT-05:00 jvenegasperu . <jvenegasp...@gmail.com>: > Hola buenos dias a todos > > tengo esta consulta > > select l.gid,st_centroid(st_intersection(v.the_geom,l.the_geom)), > st_distance(st_centroid(st_intersection(v.the_geom,l.the_geom)),st_startpoint(v.the_geom)) > from cat_vias v join cat_lote l > on st_intersects(v.the_geom,l.the_geom) > where rotulo ilike 'RUTA1%' > > se ejecuta bien en pgadmin pero el problema es que: > > la columna que deberia reportar la distancia aparece vacia en el pgadmin > no me marca nigun error. > > Si buscas en pg_proc veras que las funciones st_distance(), st_centroid() y st_startpoint() estan marcadas como strict (campo proisstrict = true) y al menos algunas versiones de st_intersection() también.
Una función marcada como STRICT (la versión corta de decir RETURNS NULL ON NULL INPUT, http://www.postgresql.org/docs/current/static/sql-createfunction.html) siempre retorna NULL si alguno de sus parametros es NULL sin ejecutar la función. Considera por ejemplo está función: """ create or replace function funcion_null( i int) returns float as $$ begin return 1/0; end; $$ language plpgsql; """ al no indicar nada de forma predeterminada la función se ejecuta siempre sin importar los parámetros. En este caso siempre me dará un error sin importar los parámetros que pase por que no los estoy usando. select funcion_null(1); select funcion_null(null); ambos dan el mismo error: """ ERROR: división por cero CONTEXTO: sentencia SQL: «SELECT 1/0» PL/pgSQL function funcion_null(integer) line 1 at RETURN """ pero si reconstruyo la función asi: """ create or replace function funcion_null( i int) returns float as $$ begin return 1/0; end; $$ language plpgsql strict; """ al ejecutar "select funcio_null(null)" veras que no da error, sino que retorna NULL. La función nunca se ejecuta porque uno de los parámetros es NULL y por lo tanto la función retorna NULL enseguida. En conclusión, uno de los parámetros que estas pasando a alguna de las funciones mencionadas arriba es NULL -- Jaime Casanova www.2ndQuadrant.com Professional PostgreSQL: Soporte 24x7 y capacitación Phone: +593 4 5107566 Cell: +593 987171157