PostgreSQL中jsonb数组列转结构化表的实现求助
正确的PostgreSQL查询语句
要将jsonb数组中的每个对象转为独立行并提取start和end值,可以使用jsonb_array_elements函数展开数组,再通过->>操作符提取字段值:
SELECT ks.id, cycle->>'start' AS start, cycle->>'end' AS end FROM table ks, jsonb_array_elements(ks.cycles) AS cycle;
关键说明:
jsonb_array_elements(ks.cycles):将cycles列的jsonb数组展开为多行,每行对应数组中的一个json对象,别名cycle代表单个对象。cycle->>'start':从单个json对象中提取start字段的文本值,若字段不存在则返回NULL(对应目标表中的空值)。- 隐式交叉连接(逗号语法)会将原表的每行与展开后的数组元素行关联,生成所需的多行结果。
你之前尝试的问题:
jsonb_path_query_array错误:该函数要求第二个参数为jsonpath类型,且需PostgreSQL 12+版本支持。即便版本兼容,此函数返回的是数组而非单行值,不符合你的需求。ks.cycles::jsonb ->> start错误:start未加单引号,PostgreSQL会将其识别为列名而非json键名,正确写法应为ks.cycles::jsonb ->> 'start',但此写法仅能提取数组中第一个对象的start值,无法展开所有元素。
内容的提问来源于stack exchange,提问作者Luis Enrique Garduno Morales
相关产品推荐
相关产品推荐

