2016-07-07 49 views
0

我有以下阵列:插件组对象为表

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 wi TH插入的每一行:

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

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

回答

1

arr是一个json数组。对?使用jsonb_array_elements将其展开为一组jsonb值。更多的json数组在你的特定例子中。排序的unnest 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)