postgres函数返回意外集合

时间:2015-07-13 18:22:00

标签: postgresql postgresql-9.2

我有一个简单的函数,它返回给定邮政编码的几何图形:

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时,我得到一个几何图形,但不是与提供的邮政编码匹配的几何图形。

为什么会这样,我如何编写一个能够返回正确值的函数?

1 个答案:

答案 0 :(得分: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无冲突。