arrays - Postgres SQL向所有json数组添加键
问题描述
在我的数据库中,我有一个表,该表有一个名为 的列items
,该列具有jsonb
类型,几乎每条记录都有这样的数据:
{"items": [{"id": "item-id", "sku": "some-sku", "quantity": 1, "master_sku": "some-master-sku"}]}
我需要创建一个添加type
到每个项目的迁移,所以它应该如下所示:
{"items": [{"id": "item-id", "sku": "some-sku", "quantity": 1, "master_sku": "some-master-sku", "type": "product"}]}
我必须添加type
到每条记录,每条记录看起来都一样。问题是,我的表中有大约百万条记录,我无法迭代每个项目并添加新项目,type
因为它可能需要很长时间并且我的部署脚本可能会崩溃。
伙计们,我怎样才能以最简单的方式做到这一点?
解决方案
只要格式/内容总是或多或少相同,最快的方法可能是字符串操作,如下所示:
UPDATE your_table
SET your_field = REGEXP_REPLACE(your_field::TEXT, '\}(.+?)', ', "type": "product"}\1', 'g')::JSONB
WHERE your_field IS NOT NULL;
示例:https ://www.db-fiddle.com/f/fsHoFKz9szpmV5aF4dt7r/1
这只是检查}
后面跟着某物的任何字符(所以我们知道它不是“items”对象中的最后一个字符,并将其替换为缺少的键/值(以及后面的任何字符)。
当然,这实际上不会执行任何验证,例如该键/值是否已经存在。您希望在性能和正确性之间处于什么位置取决于您对数据的了解。
推荐阅读
- reactjs - 使用 nwb 发布现有的 create-react-app
- c# - 动画状态..因为找不到而无法播放?
- google-cloud-platform - 将 dataproc 集群连接到 Cloud SQL 实例时,没有要代理的 Cloud SQL 实例
- git - JGit 克隆存储库在运行时显示进度
- api - 如何将变量传递回控制器中的调用方法
- mongodb - Mongo db - 使用嵌套字段(嵌套数组和对象)查询文档
- javascript - 将 ArrayBuffer 发送到 S3 放到 signedURL
- python - 气流无法识别使用 pytest 夹具构建的 zip 文件 DAG
- react-native - 如何在 React Native 中将 base64 字符串图像转换为 blob?
- linux - 如何使查询在linux服务器中工作?