PostgreSQL如何将users表jsonb类型data字段拆分为多行键值记录
实现方案
你可以直接使用PostgreSQL内置的jsonb_each_text函数完成jsonb字段的键值对拆行,具体SQL如下:
SELECT name, kv.key AS type, kv.value AS value FROM users, jsonb_each_text(users.data) AS kv;
说明
jsonb_each_text函数会将jsonb对象的每个键值对拆分为独立行,返回key(键名)和value(键值,自动转为文本类型)两个字段- 上述写法用到了隐式的横向连接(等价于显式写
CROSS JOIN LATERAL),会自动匹配每行原表记录和它对应的所有拆分行 - 如果你的示例中
adam的car值需要从chevvy改为chevrolet,可以额外加一层CASE WHEN逻辑做值替换,示例如下:
SELECT name, kv.key AS type, CASE WHEN kv.key = 'car' AND kv.value = 'chevvy' THEN 'chevrolet' ELSE kv.value END AS value FROM users, jsonb_each_text(users.data) AS kv;
内容的提问来源于stack exchange,提问作者SoWhat
相关产品推荐
相关产品推荐

