我有一个包含JSON编码数据的文本列的表格(Table A)。
JSON数据始终是一个包含一到数千个普通对象的数组。
我还有另一个表格(Table B),其中包括一个数据类型为'JSON'的列。
我想要从Table A中选择所有行,将JSON数组分割成其元素,并将每个元素插入到Table B中。
额外目标:每个对象(几乎都)有一个名为x
的键。我想要将x
的值提取到列中,并从原始对象中删除x
(如果存在的话)。
例如:Table A
| id | json_array (text) |
+----+--------------------------------+
| 1 | '[{"x": 1}, {"y": 8}]' |
| 2 | '[{"x": 2, "y": 3}, {"x": 1}]' |
| 3 | '[{"x": 8, "z": 2}, {"z": 3}]' |
| 4 | '[{"x": 5, "y": 2, "z": 3}]' |
...将变为:表格 B
| id | a_id | x | json (json) |
+----+------+------+--------------------+
| 0 | 1 | 1 | '{}' |
| 1 | 1 | NULL | '{"y": 8}' |
| 2 | 2 | 2 | '{"y": 3}' |
| 3 | 2 | 1 | '{}' |
| 4 | 3 | 8 | '{"y": 2}' |
| 5 | 3 | NULL | '{"z": 3}' |
| 6 | 4 | 5 | '{"y": 2, "z": 3}' |
这最初需要处理数百万行数据,并且需要定期运行,因此提高效率是优先考虑的。
不使用循环和PL/PgSQL是否有可能实现?我一直没有取得太大进展。
jsonb
吗?相比于json
数据类型,jsonb
有更多的选项来操作对象。使用jsonb
删除x
很容易,但是使用json
则更加复杂。 - Patrick