【发布时间】:2020-10-22 16:28:16
【问题描述】:
如果需要将嵌套的 JSONB 结构非规范化为平面表,如果我正在混合键/值和数组,是否可以在单个 SELECT 中实际完成,如下所示?我有一个包含两列的表 - repository 和 data 一个示例 data 列值如下所示:
{
"branches": {
"master": {
"type1": {
"files": [{
"filename": "a.txt",
"contents": [{
"identifier": "foo",
"value": "bar"
}]
}]
}
}
}
}
我的目标是有一个扁平化这个结构的查询,例如转换为以下 CSV 伪代码:
repository,branch,type,filename,identifier,value
a/b,master,type1,a.txt,foo,bar
我已使 JSON 示例尽可能简单,但最终会得到大约一百万行。
虽然对单个 data JSON 列的需求是固定的,但它的格式可以重构,如果它可以使非规范化更容易或更有效。例如与其将分支和类型从它们的唯一标识符中分离出来,不如将它们转换为带有标识符的数组。
【问题讨论】:
-
repository列在输出中来自哪里?顺便说一句:您实际上是在规范化您拥有的非规范化数据。 -
你能修复 JSON 吗?这是无效的,因为
{大括号的数量与}大括号的数量不匹配。并且contents数组未正确关闭。contents真的是一个数组吗?如果是的话,如果那里有多个标识符和值怎么办?它们应该在输出中显示为行还是列?
标签: postgresql jsonb