インデックスに名前を付けた方法では、これらの列に制約はないと仮定していますが、UNIQUE INDEX
:
CREATE TABLE T (a INT PRIMARY KEY, b INT, c INT);
CREATE UNIQUE INDEX u ON t(b);
INSERT INTO T (a, b, c)
VALUES (1, 2, 3)
ON CONFLICT ON CONSTRAINT u
DO UPDATE SET c = 4
RETURNING *;
上記は以下を生成します:
[42704]: ERROR: constraint "u" for table "t" does not exist
ただし、インデックスを制約に変えてください:
DROP INDEX u;
ALTER TABLE t ADD CONSTRAINT u UNIQUE (b);
そしてINSERT
ステートメントが機能するようになりました。
一意の制約と一意のインデックスの違いについては、こちらの説明をご覧ください 。これは実際にはjOOQとは関係ありません