sql - PostgreSQL 在 JSONB 数据中以文本形式查找和替换

标签 sql json postgresql sql-update syntax-error

我有一些 JSONB 数据,如下所示:

content
id       fields
0        {image: 'https://olddomain.com/file.jpg'}
1        {image: 'https://oldodmain.com/file2.jpg'}

我想对其进行查找和替换,就好像它是一个文本字段一样。我试过这个:

UPDATE content SET fields::text = REPLACE(fields::text, 'https://olddomain.com', 'https://newdomain.com');

但是这是一个语法错误。

最佳答案

强制转换的结果不是左值,您不能为其赋值。但是,您可以获取 replace 调用的文本结果并将其转换回 jsonb:

UPDATE content 
SET    fields = 
       REPLACE(fields::text, 'https://olddomain.com', 'https://newdomain.com')::jsonb;

SQLFiddle

关于sql - PostgreSQL 在 JSONB 数据中以文本形式查找和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51005106/

相关文章:

php - MYSQL 搜索查询在 php 中花费的时间太长。服务器超时

sql - 如何仅按日期从 postgres 的时间戳列中选择?

json - 在 Node-RED 中转换 JSON

xml - XML 能做什么而 JSON 不能?

javascript - 删除 JSON 对象数组的第一个元素

java - 无法找到具有逻辑名称的列

regex - postgres 9.1 中的模式匹配

mysql - 如何优化 MySQL 选择查询或使其更快

sql - 找出列是否为 NOT NULL

mysql - 由于未使用内连接,选择速度较慢