2013-04-14 4 views
1

postgresql에 다중 열 고유 인덱스가 있습니다. 때로는 이러한 열 값 중 하나가 NULL이 될 수도 있고 고유 인덱스가 NULL을 다른 값으로 처리하기를 원합니다. 이 두 행이 허용되지 않도록 :다중 연결에서 NULL 값을 갖는 다중 열 고유 인덱스의 동작

1,2,NULL 
1,2,NULL 

는 psql의에서 간단한 실험을 수행,이 정확히 내가 보는 동작입니다.

하지만 20 개의 스레드를 사용하여 20 개의 동시 삽입을 수행하는 스트레스 테스트가 있습니다. 여기서 Postgres는 동일한 행을 삽입 할 수있게합니다.

어떤 일이 발생합니까? 내 psql 실험과 테스트 실험 사이에는 또 다른 차이가있을 수 있습니다.

+1

가능한 복제본은 http://stackoverflow.com/questions/8289100/create-unique-constraint-with-null-columns입니다. –

답변

2

고유 인덱스는 널 (null) 그래서 그 값을 삽입 할 수있는 여러 가지로 간주됩니다

create table t (a int, b int, c int, unique (a, b, c)); 
insert into t (a, b, c) values 
(1, 2, null), 
(1, 2, null); 
INSERT 0 2 

가 허용되지 않는 실험을 표시합니다.

+1

gah, frak, 내 'ActiveRecord'유효성 검사가 중지되었습니다. 확실하지 않은지 내가 내 테스트에서이 명백한 것을 놓쳤다. (특히 내가 별개로 명시 적으로 테스트했기 때문에). 괜찮 감사! @dondimichaelstroma에 연결된 이중 색인 솔루션을 할 것입니다. –