Feed 函数与 PostgreSQL 中另一个函数的结果

Feed function with result of another function in PostgreSQL

我有一个函数 select 一些有趣行的 ID:

CREATE OR REPLACE FUNCTION ChannelSelection(...)
RETURNS TABLE(
    ChannelId INTEGER
) AS [...] 

它需要一些参数用于过滤目的,return一个SETOF INTEGER

我想使用这个函数 ChannelSelection 的结果来喂另一个接受 INTEGER[] 作为输入的函数:

CREATE OR REPLACE FUNCTION DataP2AMean(
      _channelid INTEGER[] = NULL
)
    RETURNS TABLE(
        ChannelId INTEGER,
        ...
    )  AS
$BODY$
SELECT
    D2.ChannelId,
    ...
FROM
    ...
WHERE
    D2.ChannelId = ANY(_channelid)
    OR _channelid IS NULL

$BODY$ LANGUAGE SQL;

当我发出以下查询时:

SELECT *
FROM DataP2AMean(_channelid := ChannelSelection(_site := '{41WOL1,41N043}'))

我收到这个错误:

ERROR: Function datap2amean(integer) doesn't exist
State SQL :42883 (undefined_function)

我不明白,因为我可以单独使用这些功能。看起来它正在搜索另一个签名,因此 ChannelSelection return 只是一个整数,但事实并非如此。

我错过了什么?

channelselection returns 一个 table(=集合)的整数。所以可能有很多很多行只有一个整数列。 datap2amean 需要一个 单个 (数组)值,而不是一组整数值。

不幸的是使用例如

select array_agg(i) from channelselection('{41WOL1,41N043}') i

仍然无济于事,因为那也是 return 一个 集合 整数数组。我们 知道 它只会 return 一行 - 但是具有一个数组列的一行仍然不同于单个整数数组值。

因此您需要将结果转换为单个值,例如像这样:

(select array_agg(i) from channelselection('{41WOL1,41N043}') i)::int[]

这可以用作另一个函数的参数:

SELECT *
FROM datap2amean ( (select array_agg(i) from channelselection('{41WOL1,41N043}') i)::int[] )