基于json的Postgresql表更新

时间:2015-05-06 06:06:51

标签: json postgresql

我以json格式获取一些数据。

jsonData json;

jsonData = '[{
    "id": 1,
        "text": "Materials and varieties",
        "parent": "0"
}, {
    "id": 2,
        "text": "Bricks",
        "parent": "1"
}, {
    "id": "new_1",
        "text": "newitem",
        "parent": "1"
}
]';

是否可以根据jsonData的id字段对表字段进行更新。

我想做点什么

UPDATE item_table SET active = 'N' WHERE
    item_id NOT IN ((jsonData ->>'id')::INTEGER) ;

我还想通过不允许与模式匹配的ID来限制jsonData' new _%'。

我正在使用Postgres 9.3

1 个答案:

答案 0 :(得分:2)

我可能做得有点过于复杂,但至少你可以这样得到ID:

select id::int from (select (json_array_elements('[{
    "id": 1,
        "text": "Materials and varieties",
        "parent": "0"
}, {
    "id": 2,
        "text": "Bricks",
        "parent": "1"
}, {
    "id": "new_1",
        "text": "newitem",
        "parent": "1"
}
]'::json))->>'id' as id) a where id not like 'new_%';

当然,更好的检查是测试id是否实际上是数字,但如果你知道它是数字还是new_,那么这也有效。

因此,只需将其添加到update ... where in ...,即可使用JSON ID。