Hi hackers, Currently we allow self-conflicting inserts for ON CONFLICT DO NOTHING:
``` CREATE TABLE t (a INT UNIQUE, b INT); INSERT INTO t VALUES (1,1), (1,2) ON CONFLICT DO NOTHING; -- succeeds, inserting the first row and ignoring the second ``` ... but not for ON CONFLICT .. DO UPDATE: ``` INSERT INTO t VALUES (1,1), (1,2) ON CONFLICT (a) DO UPDATE SET b = 0; ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time HINT: Ensure that no rows proposed for insertion within the same command have duplicate constrained values. ``` Tom pointed out in 2016 that this is actually a bug [1] and I agree. The proposed patch fixes this. [1]: https://www.postgresql.org/message-id/22438.1477265185%40sss.pgh.pa.us -- Best regards, Aleksander Alekseev
v1-0001-Make-ON-CONFLICT-DO-NOTHING-and-ON-CONFLICT-DO-UP.patch
Description: Binary data