繁体   English   中英

如何在 postgres 函数中返回一组新行?

[英]How to return set of new rows in postgres function?

我正在使用 Postgres 14.4 并有带有 jsonb formnamesexcity的表记录。

id | form
a | { "name": "John", "sex": "Male", "city": "Amsterdam" }
b | { "name": "Eva", "sex": "Female", "city": "London" }
c | { "name": "Doe", "sex": "Male", "city": "Amsterdam" }

我想返回函数嵌入的数据。

这是我尝试过的

CREATE FUNCTION generate_report_trial()
RETURNS records AS $$
    SELECT form #>> '{sex}', '{city}', count(*) as count 
      FROM records GROUP BY form #>> '{sex}', form #>> '{city}';
$$ LANGUAGE SQL STABLE;

返回void不起作用,因为我正在返回此处指定的新聚合数据https://www.postgresql.org/docs/current/sql-createfunction.html

该错误表示return type mismatch in function declared to return records 我怎样才能实现它?

您需要返回一个表:

CREATE FUNCTION generate_report_trial()
  RETURNS table (sex text, city text, num_rows bigint)
AS 
$$
  SELECT form #>> '{sex}', 
         form #>> '{city}', 
         count(*) as count 
  FROM records 
  GROUP BY form #>> '{sex}', form #>> '{city}';
$$ 
LANGUAGE SQL 
STABLE;

然后,您需要在 from 子句中使用它:

select *
from generate_report_trial();

您不能通过任何变量返回表格。 PostgreSQL 没有表变量。 创建表时,PostgreSQL 会创建一个具有相同名称的复合类型。 不是表类型 - 复合类型 - 记录。

  CREATE FUNCTION generate_report_trial()
RETURNS records AS $$
    SELECT form #>> '{sex}', '{city}', count(*) as count 
      FROM records GROUP BY form #>> '{sex}', form #>> '{city}';
$$ LANGUAGE plpgsql;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM