2015-07-13 1 views
0

У меня есть простая функция, которая возвращает геометрию для данного почтового индекса:функция Postgres возвращает неожиданный набор

CREATE FUNCTION public._zip_geom(IN zip VARCHAR) 
RETURNS SETOF geometry AS $$ 
    SELECT "the_geom_4326" FROM "shapes"."zip_polys" a WHERE a."zip" = zip 
$$ LANGUAGE sql; 

, что я называю с SELECT public._zip_geom('80302');.

Когда возврат определяется как SETOF geometry, я получаю все геометрии в таблице zip_polys. Когда я меняю его на geometry, я получаю одну геометрию, но не геометрию, которая соответствует предоставленному почтовому индексу.

Почему это и как написать функцию, которая вернет правильное значение?

+0

Переименуйте аргумент функции на то, что не является 'zip', например' CREATE FUNCTION public._zip_geom (IN _zip VARCHAR) '...' SELECT "the_geom_4326" FROM "shape". "Zip_polys" a WHERE a. " zip "= _zip' – wildplasser

ответ

0

Ваш аргумент функции сталкивается с именем столбца (! Duh), вы можете попробовать:

CREATE FUNCTION public._zip_geom(IN _omg VARCHAR) 
RETURNS SETOF geometry AS $$ 
    SELECT "the_geom_4326" FROM "shapes"."zip_polys" a WHERE a."zip" = _omg 
$$ LANGUAGE sql; 

Приставка подчеркивания в _doh или _zip более или менее условность аргументов; имена столбцов не может начать с подчеркивания, так что _omg - столкновение бесплатно.

+0

Doh! Это все, что нужно, спасибо! –