我试图以此处指定的形式更新Postrgres db中列中的用户事实。
jsonb目前在数据列中等待更新:
data = { "type1" : ["value1", "value2"], "type2" : ["value3"], "type3" : ["value4"] }
发送到db的jsonb:
new_jsonb = { "type1" : ["value7", "value8"], "type3" : ["value6"]}
jsonb应该如何处理它的更新:
updated_jsonb = { "type1: ["value7", "value8"], "type2": ["value3"], "type3": ["value6"] }
将原始数据集中的值与我们想要更新的值进行比较时的基本规则如下:
new_jsonb包含不在当前data jsonb中的键,那么这些键将被添加到它们的值中。new_jsonb包含当前data jsonb中的键,那么这些密钥都只是替换旧的键。这 post做了一项有用的工作,概述了jsonb_set函数的一般用途,但我在数组中进行比较时遇到了困难。特别指定path参数。
所以,基本上,我被困的地方是不知道该指定什么路径来实现这一点。我拥有的是UPDATE table_name SET data = jsonb_set(data {don't know what path should be}, new) WHERE customer_id = $customerId。被传递的new_jsonb并不总是按照相同的顺序传递键值对。
发布于 2017-03-29 22:20:15
使用级联操作符:
UPDATE table_name
SET data = data || $newData
WHERE customer_id = $customerId;示例:
SELECT
'{ "type1": ["value1", "value2"], "type2": ["value3"], "type3": ["value4"] }'::jsonb ||
'{ "type1": ["value7", "value8"], "type3": ["value6"]}'::jsonb as result
result
---------------------------------------------------------------------------
{"type1": ["value7", "value8"], "type2": ["value3"], "type3": ["value6"]}
(1 row)https://stackoverflow.com/questions/43104744
复制相似问题