[英]How to return set of new rows in postgres function?
我正在使用 Postgres 14.4 并有带有 jsonb form
列name
、 sex
和city
的表记录。
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.