在以下查询中,lag列获取表的类型(temp_junk),但是row列获取泛型类型记录(尽管可以强制转换为temp_junk)。这是应该的方式吗?或者我误解了什么?
drop table if exists temp_junk;
create temp table temp_junk
(
val integer
);
insert into temp_junk
values (1), (2), (3), (4);
select row(tj.*), row(tj.*)::temp_junk, lag(tj.*) over ()
from temp_junk tj;
编辑:我想我的问题变成了,为什么lag()足够智能返回一个类型但是row()不是?
答案 0 :(得分:1)
这在doc
中说明默认情况下,ROW表达式创建的值是匿名的 记录类型。如有必要,可以将其强制转换为命名的复合类型 - 表的行类型或使用的复合类型 创建类型AS。可能需要进行明确的演员以避免歧义。
因此,如果它没有投放,你会得到一个匿名记录类型=>的记录强>