执行含unnest的SQL查询报错Cannot unnest type: row,求原因
为什么
unnest(bar)会报错? 你碰到的Cannot unnest type: row错误,核心原因其实很直白:unnest()函数是用来展开数组(array)或集合(set)类型数据的,但你的bar列是行(row)类型,完全不匹配unnest的适用场景。
从你描述的bar列数据格式{thing1=abc, thing2=def}就能看出来,这是一个单行的结构化数据,不是包含多个行元素的数组/集合——如果是数组类型,格式应该是类似[{thing1=abc, thing2=def}, {thing1=ghi, thing2=jkl}]这种包含多个行的集合。
正确查询thing1的方法
既然bar是行类型,你根本不需要用unnest,直接通过行字段引用的方式就能拿到thing1的值:
select bar.thing1 from foo;
如果你的实际场景中,bar偶尔会是行数组(比如存在多个行元素的情况),那你需要先确认bar的真实数据类型。要是确实是行数组,那unnest才适用,写法会是这样:
select t.bar_tbl.thing1 from foo cross join unnest(bar) as t(bar_tbl);
但结合你现在的报错和给出的数据格式来看,bar就是单个行类型,所以直接用行字段引用就能解决问题啦。
内容的提问来源于stack exchange,提问作者sshevlyagin
相关产品推荐
相关产品推荐

