将对象数组插入表中

时间:2016-07-07 17:31:29

标签: sql arrays json postgresql

我有以下数组:

arr = [{"a":1, "b": 2}, {"a": 1, "b": 3}]

使用this post的一些帮助,我试图解析这些元素:

CREATE OR REPLACE FUNCTION jsonb_arr2text_arr(_js JSONB)
  RETURNS text[] AS
  $func$
SELECT ARRAY(SELECT jsonb_array_elements_text(_js));
$func$
LANGUAGE sql IMMUTABLE;

返回:

"{{""a"": 1, ""b"": 2},{""a"": 1, ""b"": 3}}"

现在我想将这些值插入到表格中,每个插入行加上2 fkeys

FOR LOOP OVER ARR:
    INSERT INTO table VALUES (DEFAULT, somefkeyvalue, arr[i].a, arr[i].b);

我如何将上述query写入真实的东西?

1 个答案:

答案 0 :(得分:1)

arr是一个json数组。对不对?
使用jsonb_array_elements将其展开为一组jsonb值。您的特定示例中有更多json数组。排除不需要的json数组。
然后使用引用(->运算符)到'a'和'b'键来获取插入值。

这样的东西
INSERT INTO table (somefk, a_value, b_value)
SELECT
  'somefk',
  datajson->'a',
  datajson->'b'
FROM jsonb_array_elements('[{"a":1, "b": 2}, {"a": 1, "b": 3}]'::jsonb) AS t(datajson)