【问题标题】:postgres random text in jsonb columnjsonb列中的postgres随机文本
【发布时间】:2020-12-29 16:34:38
【问题描述】:
以下是我用来清理 JSONB 列中的某些字段的查询。我正在尝试将名字和姓氏随机化,因此想使用 md5(random()::text) 之类的值作为值。
update people set
data = to_jsonb(data) || '{"firstName": "random_text", "lastName": "random_text"}'
where id = 'b3c09005-7afb-4ad6-922d-76078875e59e';
我尝试用 md5(...) 替换“random_text”,但收到错误“详细信息:令牌“md5”无效。”。我也尝试过使用 ||连接,但这也不起作用。
【问题讨论】:
标签:
sql
json
postgresql
random
sql-update
【解决方案1】:
您可以使用 json builder 函数来生成 json 对象:
update people set
data = data || jsonb_build_object(
'firstName', md5(random()::text),
'lastName', md5(random()::text)
)
where id = 'b3c09005-7afb-4ad6-922d-76078875e59e';
看起来data 的数据类型为JSONB。如果是这样,就不需要使用to_jsonb()了;你可以直接使用||。
【解决方案2】:
您应该将字符串与您的随机函数连接起来,然后将其转换为jsonb -
select ('{"firstName":"' || md5(random()::text) || '", "lastName":"' || md5(random()::text) ||'"}')::jsonb
上面将创建一个带有随机名字和姓氏的jsonb 对象。