Postgre SQLエラー:ONCONFLICT仕様に一致する一意の制約または除外制約がありません



Postgre Sql Error There Is No Unique



その理由は、SQLステートメントで競合が使用されているが、テーブル構造に関連する制限がないためです。

例えば:
テーブルの構造は次のとおりです。



CREATE TABLE 'public'.'test' ( 'a' varchar(255) COLLATE 'pg_catalog'.'default', 'b' varchar(255) COLLATE 'pg_catalog'.'default', 'c' varchar(255) COLLATE 'pg_catalog'.'default' )

挿入を実行し、競合を使用します。

insert into test values('a','b') on conflict(a,b) do update set c='1'

テーブルの作成時にaとbのCONSTRAINTが作成されなかったため、エラーが報告されていました。テーブルにCONSTRAINTを追加します。



ALTER TABLE 'public'.'test' ADD CONSTRAINT 'test_pkey' PRIMARY KEY ('a', 'b')

再実行は成功します。