0

尝试返回 type 的元素数组时出现类型不匹配错误,这是我声明table1的固有类型。table1

Error occurred during SQL query execution

Razón:
 SQL Error [42P13]: ERROR: return type mismatch in function declared to return table1[]
  Detail: Actual return type is record[].
  Where: SQL function "arrayof_records"

这是一个过度简化的代码,它重现了我的问题。

drop table if exists table1 cascade;

create table table1 (
  id        serial primary key,
  title     text,
  create_dt timestamp default now()
);

insert into table1 (title) values 
('one'),
('two'),
('three');

create or replace function arrayof_records ()
returns table1[]
stable language sql as $$
  select array_agg (t.*)
  from (
    select * from table1
    order by create_dt desc
  ) as t;
$$;

很明显,解析器期望array_agg函数中有其他表达式。我试过了 tt.**。他们都失败了。

我希望有一种语法,因为 PostgreSQL 12 文档声明“array_agg(expression)|any non-array type”。

任何的想法?

4

1 回答 1

1

您可以使用稍微不同的方式来创建数组:

create or replace function arrayof_records ()
  returns table1[]
  stable language sql 
as 
$$
  select array(
    select table1 
    from table1
    order by create_dt desc
  );
$$;

这通常也比 array_agg() 快。

于 2020-08-21T14:38:07.420 回答