PostgreSQL:将jsonb转换为列

PostgreSQL:将jsonb转换为列,postgresql,jsonb,Postgresql,Jsonb,如果在将jsonb转换为所需的表类型时遇到问题,请提供任何帮助 我的jsonb是 {"instances": [{"code": "12345"}, {"code": "6789"}, {"code": "54321"}] 我想将其转换为: code1 code2 code3 12345 6789 54321 提前谢谢 SQL的一个限制是,在执行查询之前,数据库必须知道查询的列数(及其数据类型)。因此,不可能得到今天返回3列,明天返回42列的动态查询 如

如果在将jsonb转换为所需的表类型时遇到问题,请提供任何帮助

我的jsonb是

{"instances": [{"code": "12345"}, {"code": "6789"}, {"code": "54321"}]
我想将其转换为:

code1      code2     code3
12345      6789      54321

提前谢谢

SQL的一个限制是,在执行查询之前,数据库必须知道查询的列数(及其数据类型)。因此,不可能得到今天返回3列,明天返回42列的动态查询

如果数组元素的数量是静态的(或至少有一个上限),则可以使用以下方法:

select the_column -> 'instances' -> 0 ->> 'code' as code_1, 
       the_column -> 'instances' -> 1 ->> 'code' as code_2, 
       the_column -> 'instances' -> 2 ->> 'code' as code_3
from the_table;
您可以通过使用派生表来简化这一点:

select inst -> 0 ->> 'code' as code_1, 
       inst -> 1 ->> 'code' as code_2, 
       inst -> 2 ->> 'code' as code_3
from (
  select the_column -> 'instances' as inst
  from the_table
) t

如果数组中有5000个代码呢?在SQL查询中不能返回任意数量的列。在我的上下文中最多可以有3列