"DO UPDATE SET" 未按预期工作
"DO UPDATE SET" not working as expected
我在 PHP 中使用 PDO 库,我正在生成这样的 PostgreSQL 语句:
INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = EXCLUDED.sw + ?
RETURNING ident
对于 PDO execute() 语句的参数,我传入数组 [7172, 10, 1, 1]
。
那个production_worktable对now()
的day
参数有一个默认值这就是我不传进去的原因,还有一个唯一的约束集在为 ON CONFLICT
部分列出的三个字段上。
没有冲突时,它正确地将 sw
列的值设置为 1。但是,当有冲突时,sw
列的值当前为 0,然后此语句运行 sw
列,最终值为 2,而不是 1。
我做错了什么?
记录 EXCLUDED
包含要插入但导致冲突的值,因此在本例中 EXCLUDED.sw
= 1。无需再添加 1:
INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = EXCLUDED.sw
RETURNING ident;
如果要将给定值添加到现有值,请使用:
INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = sw + EXCLUDED.sw
RETURNING ident;
我在 PHP 中使用 PDO 库,我正在生成这样的 PostgreSQL 语句:
INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = EXCLUDED.sw + ?
RETURNING ident
对于 PDO execute() 语句的参数,我传入数组 [7172, 10, 1, 1]
。
那个production_worktable对now()
的day
参数有一个默认值这就是我不传进去的原因,还有一个唯一的约束集在为 ON CONFLICT
部分列出的三个字段上。
没有冲突时,它正确地将 sw
列的值设置为 1。但是,当有冲突时,sw
列的值当前为 0,然后此语句运行 sw
列,最终值为 2,而不是 1。
我做错了什么?
记录 EXCLUDED
包含要插入但导致冲突的值,因此在本例中 EXCLUDED.sw
= 1。无需再添加 1:
INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = EXCLUDED.sw
RETURNING ident;
如果要将给定值添加到现有值,请使用:
INSERT INTO production_work (order_id, producer_id, sw)
VALUES (?,?,?)
ON CONFLICT (order_id, producer_id, day)
DO UPDATE SET sw = sw + EXCLUDED.sw
RETURNING ident;