Postgresql函数返回记录数
Posted
技术标签:
【中文标题】Postgresql函数返回记录数【英文标题】:Postgresql function returning number of records 【发布时间】:2019-02-14 04:17:20 【问题描述】:我想创建一个函数,返回作为参数传递的 SQL 表达式可以生成的记录数。谁能让我走上正确的道路?
【问题讨论】:
嗨,欢迎来到 ***!请提供您迄今为止尝试过的代码的Minimal, Complete, and Verifiable example! 至少你需要更好地指定函数应该做什么。例如,function F takes params K, L, N. Given table A has rows (r1, r2, r3), F(k, l, n) should return X, and F(k2, l2, n2) should return X2
。
【参考方案1】:
您的函数应该返回一个SETOF
some(记录)类型。
然后使用RETURN NEXT
语法返回每一行。
请参阅文档页面中的示例。 https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#id-1.8.8.8.3.4
【讨论】:
【参考方案2】:在纯 SQL 中,您可以使用派生表(将查询放在 FROM
子句中的子查询中)获取返回的行数,如下所示:
select count(*)
from (
<your query>
) s;
在 plpgsql 函数中执行相同的操作。您需要一个 dynamic command,因为该函数应该适用于任何有效的 SQL 查询:
create or replace function number_of_rows(query text)
returns bigint language plpgsql as $$
declare
c bigint;
begin
execute format('select count(*) from (%s) s', query) into c;
return c;
end $$;
例子:
select number_of_rows('select * from generate_series(1, 3)');
number_of_rows
----------------
3
(1 row)
【讨论】:
Thanyou klin 我按照您的指示进行操作,效果很好! :-)以上是关于Postgresql函数返回记录数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 postgresql 中使用 postgres_fdw 从另一个数据库中获取记录