PostgreSQL中如何向JSONB列内JSON对象的数组追加元素
向PostgreSQL JSONB数组追加元素的正确写法
假设你的表名为decks,存储JSONB数据的列名为data,要向myFirstDeck.cards数组追加整数4,可以用jsonb_set结合JSONB数组拼接运算符||来实现,SQL语句如下:
UPDATE decks SET data = jsonb_set( data, '{myFirstDeck, cards}', data->'myFirstDeck'->'cards' || '[4]'::jsonb ) -- 这里添加你的过滤条件,比如指定某一行:WHERE id = 1;
关键逻辑说明
data->'myFirstDeck'->'cards':精准定位到目标数组|| '[4]'::jsonb:把新元素组成的JSONB数组和原数组拼接,实现追加效果jsonb_set:将拼接后的新数组替换回原JSON结构的对应位置
动态追加变量的情况
如果要追加的是变量(比如应用传入的参数),可以用to_jsonb()将数值转为JSONB类型,避免手动拼接字符串:
-- 假设new_card是要追加的整数变量 UPDATE decks SET data = jsonb_set( data, '{myFirstDeck, cards}', data->'myFirstDeck'->'cards' || to_jsonb(new_card) ) WHERE ...;
处理数组不存在的边界情况
如果cards数组可能不存在(为null),可以用coalesce默认化为空数组,避免拼接出错:
UPDATE decks SET data = jsonb_set( data, '{myFirstDeck, cards}', coalesce(data->'myFirstDeck'->'cards', '[]'::jsonb) || to_jsonb(5) ) WHERE ...;
内容的提问来源于stack exchange,提问作者Alex Mitchell
相关产品推荐
相关产品推荐

