返回记录数的 Postgresql 函数

Postgresql function returning number of records

我想创建一个函数,返回作为参数传递的 SQL 表达式可以生成的记录数。任何人都可以让我走上正确的道路吗?

您的函数应该 return 一个 SETOF 一些(记录)类型。 然后,您使用 RETURN NEXT 语法 return 每行。

有关此内容,请参阅文档页面中的示例。 https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#id-1.8.8.8.3.4

在普通的 SQL 中,您可以使用派生的 table(将查询放在 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)