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')
再実行は成功します。