PostgreSQL中是否有函数可将JSONB对象的键转为列?
提取PostgreSQL JSONB列中的字段为普通列
假设我们已经创建了存储JSONB数据的表并插入了测试数据:
CREATE TABLE data (obj JSONB); INSERT INTO data (obj) VALUES ('{"a": 1, "b": 2}'::jsonb); INSERT INTO data (obj) VALUES ('{"a": 3, "b": 4}'::jsonb);
现在需要把JSONB对象里的a和b字段提取出来,生成如下的常规表格结果:
a | b ---|--- 1 | 2 3 | 4
可行的查询语句
使用PostgreSQL内置的jsonb_to_record()函数就能轻松实现这个需求,结合隐式交叉连接语法,查询语句如下:
SELECT x.* FROM data, jsonb_to_record(obj) AS x(a text, b text);
小提示
如果你需要a和b是数值类型(比如整数),可以把定义里的text改成int,比如:
SELECT x.* FROM data, jsonb_to_record(obj) AS x(a int, b int);
这个函数的作用是把单个JSONB对象解析成符合你指定结构的行记录,配合表连接后就能将JSON里的字段转换成普通列输出啦。
内容的提问来源于stack exchange,提问作者martin8768
相关产品推荐
相关产品推荐

