假设我在 Postgres 上有一个表,其中 jsonb 列包含{"a": 1, "b": 2}. 现在我想插入一个具有相同 id 和{"b": 10, "c": 20}jsonb 列值的记录。
因此,我希望行的 jsonb 字段包含{"a": 1, "b": 10, "c": 20}. 如何做到这一点?
a_h*_*ame 10
如果你想要一个“upsert”,你可以用 insert ... on conflict...
insert into the_table (id, json_column)
values (1, '{"b": 10, "c": 20}'::jsonb)
on conflict (id) do update
set json_column = table_name.json_column || excluded.json_column;
Run Code Online (Sandbox Code Playgroud)
如果连接 2 个 jsonb 值,您就可以实现您想要的,例如:
select '{"a": 1, "b": 2}'::jsonb || '{"b": 10, "c": 20}'::jsonb
Run Code Online (Sandbox Code Playgroud)
产生: "{"a": 1, "b": 10, "c": 20}"
如果两个操作数都是具有公共键字段名称的对象,则结果中字段的值将只是来自右侧操作数的值。
https://www.postgresql.org/docs/current/static/functions-json.html