在 PostgreSQL 中,有 Set-Returning-Functions (SRF)。但我想知道是否还有一种方法可以将未知关系传递给函数?换句话说,除了传递元组集的名称之外,是否可以编写Set-Taking-Functions (可以这么说) ?
显然,存在可以传递表名的动态 SQL。使用pgRouting,甚至可以使用整个字符串将元组集传递给函数:
SELECT * FROM shortest_path('
SELECT gid AS id,
start_id::int4 AS source,
end_id::int4 AS target,
shape_leng::float8 AS cost
FROM network',
1,
5110,
false,
false);
但是参数中的SQL字符串似乎不太安全。另一种可能是先将结果存储到临时表中,并传递临时表的名称,这似乎违背了SQL中基于集合编程的思想。
有没有其他方法可以将集合传递给函数?
您可以定义一个记录类型来表示您要传递的内容的一个元组,然后传递该类型的数组:
然后将数组传递给您的函数:
函数参数需要定义为
path_info[]
:根据您对这些值的处理方式,接收与横向连接一起使用的单个记录的函数可能更有效:
就像是: