如何为postgresql查询将jsonb数组拆分为行

如何为postgresql查询将jsonb数组拆分为行,postgresql,jsonb,Postgresql,Jsonb,我的目标是将包含数组的json列的表上的查询结果分解为单独的行。但是,我不确定编写此查询的语法。我用这个: 对于以下查询 SELECT jobs.id, templates.Id, templates.Version, templates.StepGroupId, templates.PublicVersion, templates.PlannedDataSheetIds, templates.Sn

我的目标是将包含数组的json列的表上的查询结果分解为单独的行。但是,我不确定编写此查询的语法。我用这个:

对于以下查询

SELECT
       jobs.id,
       templates.Id,
       templates.Version,
       templates.StepGroupId,
       templates.PublicVersion,
       templates.PlannedDataSheetIds,
       templates.SnapshottedDataSheetValues
FROM jobs,
     jsonb_to_recordset(jobs.source_templates) AS templates(Id, Version, StepGroupId, PublicVersion,
                                                            PlannedDataSheetIds, SnapshottedDataSheetValues)
下表:

create table jobs
(
    id uuid default uuid_generate_v4() not null
        constraint jobs_pkey
            primary key,
    source_templates jsonb,
);
对于包含以下格式数据的jsonb列:

[  
   {  
      "Id":"94729e08-7d5c-459d-9244-f66e17059fc4",
      "Version":1,
      "StepGroupId":"0274590b-c08d-4963-b37e-8fc8f25151d2",
      "PublicVersion":1,
      "PlannedDataSheetIds":null,
      "SnapshottedDataSheetValues":null
   },
   {  
      "Id":"66791bfd-8cdb-43f7-92e6-bfb45b0f780f",
      "Version":4,
      "StepGroupId":"126404c5-ed1e-4796-80b1-ca68ad486682",
      "PublicVersion":1,
      "PlannedDataSheetIds":null,
      "SnapshottedDataSheetValues":null
   },
   {  
      "Id":"e3b31b98-8052-40dd-9405-c316b9c62942",
      "Version":4,
      "StepGroupId":"bc6a9dd3-d527-449e-bb36-39f03eaf87b9",
      "PublicVersion":1,
      "PlannedDataSheetIds":null,
      "SnapshottedDataSheetValues":null
   }
]
我得到一个错误:

[42601] ERROR: a column definition list is required for functions returning "record"

不产生错误的正确方法是什么

您需要定义数据类型:

SELECT
       jobs.id,
       templates.Id,
       templates.Version,
       templates.StepGroupId,
       templates.PublicVersion,
       templates.PlannedDataSheetIds,
       templates.SnapshottedDataSheetValues
FROM jobs,
     jsonb_to_recordset(jobs.source_templates) 
         AS templates(Id UUID, Version INT, StepGroupId UUID, PublicVersion INT,
                      PlannedDataSheetIds INT, SnapshottedDataSheetValues INT)