postgres lag有类型但行没有。为什么?

时间:2015-03-16 16:30:31

标签: postgresql

在以下查询中,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()不是?

1 个答案:

答案 0 :(得分:1)

这在doc

中说明
  

默认情况下,ROW表达式创建的值是匿名的   记录类型。如有必要,可以将其强制转换为命名的复合类型 -   表的行类型或使用的复合类型   创建类型AS。可能需要进行明确的演员以避免歧义。

因此,如果它没有投放,你会得到一个匿名记录类型=>的记录