在 Postgres 中插入记录时如何合并现有的 jsonb 字段?

use*_*740 5 postgresql jsonb

假设我在 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)


OTA*_*TAR 5

如果连接 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

  • 如果您需要更新现有的 jsonb 值,那么您可以执行以下操作: `uptade table_name set col = col || '{"b": 10, "c": 20}'::jsonb 其中 id = ?` (3认同)