설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 94건, 최근 0 건
   

unique index 와 null

글쓴이 : PostgresDBA 날짜 : 2017-04-11 (화) 13:22 조회 : 6905

아래 처럼 x 컬럼에 대해 unique 인덱스가 생성되어 있습니다.

하지만 null 경우는 중복해서 insert 가능합니다.

(Oracle/PostgreSQL/EPAS 모두 동일)

-----------------------------------------------------------------

SQL> create table x(x int);

SQL> create unique index xidx on x(x);

SQL> insert into x values(null);

SQL> insert into x values(null);

SQL> insert into x values(100);

SQL> select * from x;

         X
----------
        10


       100

SQL>


하지만 특이하게도,  MS-SQL 에서는 null 을 중복해서 insert 할수가 없습니다. null 또한 unique 한 값으로 보기 때문입니다.

만약 PostgreSQL 에서도 MS-SQL 처럼 동작하도록 하고자 한다면 다음과 같이 하면 됩니다.

SQL> create table x(x int);                                                        
CREATE TABLE
Time: 527.001 ms

SQL> CREATE UNIQUE INDEX xidx ON X ((X IS NULL)) WHERE X IS NULL; -- 이중괄호 주의!


CREATE INDEX
Time: 106.574 ms

SQL> insert into x values(100);
INSERT 0 1
Time: 3.136 ms

SQL> insert into x values(null);
INSERT 0 1
Time: 2.257 ms

SQL> insert into x values(null);
ERROR:  duplicate key value violates unique constraint "xidx"
DETAIL:  Key ((x IS NULL))=(t) already exists.

Time: 0.596 ms

SQL>



   

postgresdba.com