이것은 PostgreSQL의 실제 문제를 보여주는 장난감 예제입니다. 아래 예제는 PostgreSQL 8.4.3 서버를 사용하고 있지만 다른 버전에서도 동일한 문제가 있다고 생각됩니다. 행을 삭제하거나 테이블 스키마를 수정하지 않고PostgreSQL에서 null이 아니며 고유 한 제약 조건이있는 열을 업데이트하는 특별한 경우
=> select * from tmp_foo; foo | bar -----+----- t | f f | t
:
=> create table tmp_foo (foo boolean not null unique, bar boolean not null unique); => insert into tmp_foo (foo, bar) values (true, true), (false, false); => select * from tmp_foo; foo | bar -----+----- t | t f | f
테이블은 다음과 같이 수정할 수 있습니다 :
은 다음 표를 감안할 때? 이 :=> update tmp_foo set bar = not bar; ERROR: duplicate key value violates unique constraint "tmp_foo_bar_key"
이 작동하지 않습니다.
삭제가 허용하는 경우이 :
=> create temp table tmp_foo_2 as select * from tmp_foo; => update tmp_foo_2 set bar = not bar; => delete from tmp_foo; => insert into tmp_foo select * from tmp_foo_2;
작품. 이 예제에서 가장 간단한 솔루션은 아니지만 더 복잡한 예제로 쉽게 일반화 할 수 있습니다.
흥미로운 문제이지만, 왜 거기에 삭제를 원하지 않는지 이해할 수 없습니다. 아주 제한된 제약 집합을 만들었습니다. 해결하려는 더 큰 문제는 무엇입니까? – Charles