【发布时间】:2017-01-24 14:50:59
【问题描述】:
在 Postgres 数据库中,我有一个定义用户的表(用户)。就像
|ID| meta |
|01| {"email" : "test1@gmail.com","importance" : "High"} |
|02| {"email" : "test2@gmail.com","importance" : "Medium"}|
正如您所见,'meta' 列包含 json,出于特定原因。 (不可更改)
我想创建一个函数,它接受 3 个参数:
- 一封电子邮件 (inc_email)
- 密钥 (inc_key)
- 一个值(inc_value)
然后它将搜索具有包含电子邮件的元数据的记录,并将新的键值添加到 json 中。但!如果 value 为空,如果 key-values 已经存在,它将删除它们。
示例:
函数('test1@gmail.com','security','true')
结果:
|ID| meta |
|01| {"email" : "test1@gmail.com","importance" : "High", "security":"true"} |
然后:
function('test1@gmail.com','security','')
结果:
|ID| meta |
|01| {"email" : "test1@gmail.com","importance" : "High"}|
到目前为止,我已经到了搜索特定记录的地步,并返回了 json 结果,但我不确定实现此 json 修改的最佳方法是什么。
declare
ret json;
begin
select array_to_json(array_agg(u.meta)) into ret
from Users u
where meta::text LIKE ('%"email" : "' || inc_email || '%');
return ret;
end;
【问题讨论】:
标签: database postgresql function