我需要替換 Postgresql 中 jsonb 物件內特定鍵的值:
create table content (
id int,
dynamic_fields jsonb
);
insert into content values (0, '{
"key1": "aaaaa text1",
"key2": "text1",
"key3": "blabla"}'::jsonb);
UPDATE content
SET dynamic_fields = replace(dynamic_fields::text, 'text1', 'text2')::jsonb;
這里的代碼給出了以下結果:
id | dynamic_fields
0 | {"key1": "aaaaa text2", "key2": "text2", "key3": "blabla"}
我不想替換所有出現的“text1”,而是只替換“key1”值中的那個文本:我該怎么做?
更新的結果應該是這樣的:
id | dynamic_fields
0 | {"key1": "aaaaa text1", "key2": "text2", "key3": "blabla"}
更新了想要的結果,還不夠清楚。
uj5u.com熱心網友回復:
使用函式jsonb_build_object()。
update content
set dynamic_fields =
dynamic_fields ||
jsonb_build_object('key1', replace(dynamic_fields->>'key1', 'text1', 'text2'))
where dynamic_fields ? 'key1'
在Db<>fiddle 中測驗它。
uj5u.com熱心網友回復:
您可以使用運算子|| 聯系兩個JSON資料并生成新的JSON資料。現在我們可以使用|| 老JSON資料加入到新的JSON資料(如:{"key2": "text2"})
演示
update content
set dynamic_fields = dynamic_fields || '{"key2": "text2"}'::jsonb;
PS:
此外,您可以使用jsonb_set函式來更改資料。
演示
update content
set dynamic_fields = jsonb_set(dynamic_fields, '{key2}', '"text2"');
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/363752.html
標籤:PostgreSQL的 代替 jsonb
下一篇:使用psycopg2批量插入多行
