首页 > 解决方案 > 将数组取消嵌套到表 Postgres

问题描述

如何在 Postgres 中将 ARRAY 取消嵌套为表格格式 这些是我创建的类型

create type ngfcst.test1 as (territory character varying, territoryname character varying, parentname character varying, parentterritory character varying, lowest_level_flag character varying, count bigint);

我正在做一个 array_agg 来使用这种类型返回一个结果集。下面是函数 test12 的示例输出:

select * from test12(
    'some_parameters');
OUTPUT (2 records):
{"(\"rec11",rec12,\"rec13",\"rec14\",rec15,1)","(\"rec21\",rec22,\"rec23\",\"rec24\",rec25,2)"}

我希望数据采用正确的表格格式,但这样做无济于事:

with main as(
    select * from  test12(
    'some_parameters'))
    select unnest(o_show_proxy::ngfcst.test1[]) as unnest_col from main;

这确实分隔了记录,但没有分隔列。我想要从下面的查询中得到的行和列格式的输出:

select * from unnest(array[row('row11','row12','row13','row14','row15',1),
              row('row21','row22','row23','row24','row25',2)]::ngfcst.test1[])

让我知道是否有任何方法可以获取行和列格式的输出。

标签: sqlarrayspostgresql

解决方案


这里cross join lateral会有所帮助——

根据你的例子。考虑到您的函数test12()根据您的用户定义的 TYPE 返回正确的数组格式test1

尝试这个:

with cte as(
    select * from  test12(
    'some_parameters')
)
    select t.* from cte cross join lateral unnest(cte.o_show_proxy::test1[]) t;

演示


推荐阅读