错误:无法在非数组(postgresql)上调用jsonb\ to\ u记录集

yrefmtwq  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(370)

在列步骤中,我有如下json值 [{"id":"ali","status":"open","reminder":"tomorrow","show_due_date":"true"}] 我想查询新表,就像每个键的单独列一样
id |状态|提醒|显示到期日|
我写了这个脚本,但是得到的错误是不能调用jsonb\u到非数组上的\u记录集

WITH series (jsonbrecords) AS (Select steps::jsonb from files)
INSERT INTO new
    (column1,
     column2,
     column3,
     column4)
SELECT  t."id", t."status", t."reminder", t."show_due_date"
  FROM series
 CROSS JOIN LATERAL
 jsonb_array_elements(jsonbrecords) AS x(doc),
 jsonb_to_recordset(x.doc) as t("id" text, "status" text,"reminder" text,"show_due_date" text)
aamkag61

aamkag611#

您将两次取消json数组的测试,一次是使用 jsonb_array_elements 还有一次是 jsonb_to_recordset . 你只需要其中一个。

INSERT INTO new(column1, column2, column3, column4)
SELECT t."id", t."status", t."reminder", t."show_due_date"
  FROM files f
  CROSS JOIN LATERAL jsonb_to_recordset(f.steps::jsonb) AS t("id" text, "status" text, "reminder" text, "show_due_date" text)
xzv2uavs

xzv2uavs2#

您可以使用下面的查询将各个列显示出来,而无需使用其他函数:

SELECT x.doc ->> 'id' AS id, 
       x.doc ->> 'status' AS status,
       x.doc ->> 'reminder' AS reminder, 
       x.doc ->> 'show_due_date' AS show_due_date
  FROM series
 CROSS JOIN LATERAL jsonb_array_elements(jsonbrecords) AS x(doc)

演示
如果需要,可以继续执行此查询以插入到新表中:

INSERT INTO new_table(column1,column2,column3,column4)
<the above query>

相关问题