在 Postgres 中存储和更新 jsonb 值
Store and update jsonb value in Postgres
我有一个 table 例如:
ID | Details
1 | {"name": "my_name", "phone": "1234", "address": "my address"}
2 | {"name": "his_name", "phone": "4321", "address": "his address"}
在此,Details是一个jsonb对象。我想向 jsonb 添加另一个名为 'tags' 的字段,它应该有一些特定的键。在这种情况下,"name"、"phone"。查询执行后的最终状态应该是:
ID | Details
1 | {"tags": {"name": "my_name", "phone": "1234"},"name": "my_name", "phone": "1234", "address":"my address"}
2 | {"tags": {"name": "his_name", "phone": "4321"},"name": "his_name", "phone": "4321", "address":"his address"}
我可以想到以下步骤来完成此操作:
- 遍历每一行并提取变量中的详细信息["name"]和详细信息["phone"]。
- 将这些变量添加到 jsonb。
我想不出相应的 postgres 查询应该如何。请指导。
当然要使用连接运算符!
https://www.postgresql.org/docs/current/functions-json.html
update t1 set details = details || '{"tags": {"name": "my_name"}}' where id = 1
您可以提取您感兴趣的键,构建一个新的 json 值并将其附加到列中:
update the_table
set details = details || jsonb_build_object('tags',
jsonb_build_object('name', details -> 'name',
'phone', details -> 'phone'));
使用jsonb_build_object
update t set details
= jsonb_build_object ( 'tags',
jsonb_build_object( 'name', details->>'name', 'phone',details->>'phone')
)
|| details
我有一个 table 例如:
ID | Details
1 | {"name": "my_name", "phone": "1234", "address": "my address"}
2 | {"name": "his_name", "phone": "4321", "address": "his address"}
在此,Details是一个jsonb对象。我想向 jsonb 添加另一个名为 'tags' 的字段,它应该有一些特定的键。在这种情况下,"name"、"phone"。查询执行后的最终状态应该是:
ID | Details
1 | {"tags": {"name": "my_name", "phone": "1234"},"name": "my_name", "phone": "1234", "address":"my address"}
2 | {"tags": {"name": "his_name", "phone": "4321"},"name": "his_name", "phone": "4321", "address":"his address"}
我可以想到以下步骤来完成此操作:
- 遍历每一行并提取变量中的详细信息["name"]和详细信息["phone"]。
- 将这些变量添加到 jsonb。
我想不出相应的 postgres 查询应该如何。请指导。
当然要使用连接运算符!
https://www.postgresql.org/docs/current/functions-json.html
update t1 set details = details || '{"tags": {"name": "my_name"}}' where id = 1
您可以提取您感兴趣的键,构建一个新的 json 值并将其附加到列中:
update the_table
set details = details || jsonb_build_object('tags',
jsonb_build_object('name', details -> 'name',
'phone', details -> 'phone'));
使用jsonb_build_object
update t set details
= jsonb_build_object ( 'tags',
jsonb_build_object( 'name', details->>'name', 'phone',details->>'phone')
)
|| details