PostgreSQL如何将JSONB数组的数组转换为PG数组的数组?
将JSONB数组转换为PostgreSQL数组的数组
针对你的需求,可以通过拆分JSONB数组、提取元素构造PG数组再聚合的方式实现,具体SQL语句如下:
SELECT array_agg(ARRAY[item->>0, item->>1]) AS pg_array FROM products, jsonb_array_elements("options") AS item;
语句说明:
jsonb_array_elements("options"):将外层JSONB数组拆分为单个的JSONB内层数组元素,用别名item指代。ARRAY[item->>0, item->>1]:从每个JSONB内层数组中提取第1、第2个元素(索引从0开始),构造为text类型的一维数组。array_agg(...):将所有一维数组聚合为一个二维PG数组,即你需要的ARRAY[ARRAY['black', '2'], ARRAY['white', '7']]格式。
如果JSONB内层数组长度不固定,可使用PostgreSQL 12+支持的jsonb_to_text_array函数实现通用转换:
SELECT array_agg(jsonb_to_text_array(item)) AS pg_array FROM products, jsonb_array_elements("options") AS item;
内容的提问来源于stack exchange,提问作者Alex Poloz
相关产品推荐
相关产品推荐

