我有一个Postgres 11.12数据库,其中有一个名为workflows_emails
的表,表中有一个名为to
的json列。
[
{
"type":"employee",
"assignment":{
"..."
}
},
{
"type":"external",
"email":"mailbox@foobar.com"
}
]
我想更新json数组,对所有type
字段为external
的实体中的email
字段进行模糊处理。生成的数组如下所示:
[
{
"type":"employee",
"assignment":{
"..."
}
},
{
"type":"external",
"email":"mailbox@foobar.com.SBX"
}
]
有没有办法用Postgres查询来实现这一点?
1条答案
按热度按时间mbjcgjjk1#
假设您的
workflows_emails
表有一个id
主键列,您可以通过运行以下更新来更新数组中相应的JSON对象:new_to
中的子查询迭代JSON数组中的元素并转换type
为external
的对象。迭代是通过使用jsonb_array_elements
解包JSON数组来完成的,这样我们就可以对各个元素计算条件和转换。转换适当的元素后,我们使用json_agg
重新创建JSON数组。对于转换,我们使用jsonb_set
,它将现有JSON对象的email
字段设置为一个新值。然后使用子查询得结果更新原始表得
"to"
列.您可以在dbfiddle上看到结果。