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 从另一个数据库中获取记录

如何使用 Talend Open Studio 处理数百万条 MongoDB 记录并将其插入 Postgres

如何在 PostgreSQL 中返回记录数

从烧瓶中的 PostgreSQL 函数提交事务

从 Postgres 函数返回数据

Postgresql:在不返回任何记录的视图上选择查询