sql - 如何在 Postgres 中使用 ON CONFLICT UPDATE 子句插入多条记录?
问题描述
鉴于此表,这只是一个示例。
CREATE TABLE orders(
order_id text primary key,
payment_status text not null
)
我需要对多条记录进行更新插入。
INSERT INTO orders(
order_id,
payment_status
)
VALUES ('101','Paid'), ('102', 'Unpaid')
ON CONFLICT (order_id) DO UPDATE SET
payment_status = payment_status;
payment_status
返回为ambiguous。
我在这里要解决的问题是我有一个导入数据的过程,但如果遇到冲突,它需要用新数据更新当前数据。(这是一个历史表,有时会为其历史获取新数据)我可以将其分解为单个插入,但这会产生巨大的性能成本。
我还需要用这个更新不止一列,而不仅仅是payment_status
如果这很重要。
解决方案
使用excluded
记录:
INSERT INTO orders(
order_id,
payment_status
)
VALUES ('101','Paid'), ('102', 'Unpaid')
ON CONFLICT (order_id) DO UPDATE
SET payment_status = EXCLUDED.payment_status;
推荐阅读
- node.js - Lambda 函数未插入 Postgres RDS
- scikit-learn - “ConvergenceWarning:Liblinear 收敛失败,增加迭代次数。” 使用 MNIST 数据训练 SVM 时出错
- r - 在 R 中,根据相邻列中字符的匹配将值替换为 NA
- python - 如何使用 Selenium 和 Python 在 iframe 之间切换?
- javascript - 如何获取添加到日历谷歌链接的日期格式
- loops - 批处理文件 - 使用具有可变数量变量的 xcopy 循环?
- flutter - BottomNavigationBar 在颤动中溢出
- amazon-web-services - bucket_properties.acceleration_configuration.error_put.denied.header
- jquery - 如何将变量传递给 jquery.each 中的数组数据选择器
- azure - Azure ADB2C 使用 expo cli 进入反应原生移动应用程序 - 登录时面临文件或目录未找到错误