是否可以在 PostgreSQL 中扩展现有数据类型?本质上,我想要这个 TypeScript 的等价物,但在 SQL 中:
interface Meeting {
id: number;
start: Date;
end: Date;
description: string;
}
interface ServiceHour extends Meeting {
total: number;
hours: number;
}
因为我有一个函数,它返回一个meetings
表中的所有列,然后是在查询时计算的另外两个total
和列。hours
该函数如下所示:
create or replace function user_hours(org_id text, user_id text)
returns table (like meeting_instances)
as $$
select (sum(hours) over (order by _.instance_time)) total, * from (
select
extract(epoch from ((meeting_instances.time).to - (meeting_instances.time).from)) / 60 / 60 as hours,
meeting_instances.*
from meeting_instances inner join relation_people on relation_people.meeting = meeting_instances.id
where relation_people.user = user_id
and meeting_instances.org = org_id
and meeting_instances.instance_time <= current_date
) as _;
$$
language sql stable;
现在,我收到类型不匹配错误,因为table (like meeting_instances)
它与包含meeting_instances
列和两个新列的hours
表不同total
。我想要做的是这样的事情(显然下面的语法实际上并不存在......但我不确定是否有另一种方法可以使用类似的速记语法来做到这一点):
returns table (total float, hours float, meeting_instances.*)
returns table (total float, hours float) intersect (like meeting_instances)
returns table (total float, hours float) extends (like meeting_instances)
我目前的解决方法是创建一个视图,然后让该函数简单地查询该视图并返回视图的类型。