Postgres:如何从存储函数返回一个整数数组

时间:2014-11-10 21:42:21

标签: arrays postgresql stored-procedures

我想使用以下内容创建查询:

select id, array(id_adj(id)) from existingtable

这将是两列:1表示id,第2列表示整数数组。

函数id_adj返回一组行(单列整数),编写如下:

DROP FUNCTION IF EXISTS id_adj(hz_id int);
CREATE FUNCTION id_adj(id int) returns SETOF int AS $$
    select b.id
        from existingtable a, existingtable b
        where a.id != b.id
          and a.id=$1
          and ST_Distance(a.wkb_geometry, b.wkb_geometry) <= 0.05
$$LANGUAGE SQL

上述功能适用于单个ID。例如:

select id_adj(462);

返回包含整数值的单个列。

我知道array()函数返回一个给定SELECT语句查询结果的值数组。例如:

select array(select id from existingtable where id<10);

返回一个数组&#34; {6,5,8,9,7,3,4,1,2}&#34;。

但将两者结合起来似乎并不奏效。请注意,虽然我使用上面的postgis ST_Distance函数,但不需要测试我的问题的解决方案。

我也开放让函数返回一个数组而不是一组setof记录,但这一开始看起来更复杂。

1 个答案:

答案 0 :(得分:1)

您缺少select声明

select
    id,
    array(select id_adj(id))
from existingtable