postgres 函数 returns 意外设置

postgres function returns unexpected set

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

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');.

调用

当 return 定义为 SETOF geometry 时,我在 zip_polys table 中得到 all 几何图形。当我将其更改为仅 geometry 时,我得到一个单一的几何图形,但不是与提供的邮政编码匹配的几何图形。

为什么会这样,我该如何编写一个函数来 return 正确的值?

您的函数参数与列名冲突(糟糕!),您可以尝试:

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是无冲突的。