我试图根据一个ID是否已存在于表中,在一个postgres语句中批量向数据库中插入或更新行。我将同时更新/插入100行或更多行
我在网上能找到的最接近的解决方案是下面的ON CONFLICT语句,但这并没有给我我想要的结果。
起始表格数据示例
ID | DATE | PRICE
1 | 1/02/2019 | 10
INSERT INTO table1 (id, date, price)
VALUES (1, '1/14/2019', 20), (2, '1/15/2019', 43)
ON CONFLICT(id) DO UPDATE
SET date = table1."date", price = table1.price
以下是运行上述SQL语句后的更新表
ID | DATE | PRICE
1 | 1/02/2019 | 10
2 | 1/15/2019 | 43
插入具有ID的行,但第一行值不会用新值更新,而是保留表中已经存在的旧值
我想要的结果如下
ID | DATE | PRICE
1 | 1/14/2019 | 20
2 | 1/15/2019 | 43
答案 0 :(得分:0)
在manual中这样说:
ON CONFLICT DO UPDATE中的SET和WHERE子句可以使用表名(或别名)访问现有行,并使用特殊的 excluded 表访问建议插入的行。
>
(强调我的)。
因此,您的声明应该是:
<hash-of-B4>..H
您的操作方式是,使用与表中已存在的值相同的值更新列。