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


총 게시물 94건, 최근 0 건
   

DOMAIN 타입의 활용

글쓴이 : PostgresDBA 날짜 : 2014-11-11 (화) 13:30 조회 : 5345
TEST1 과 TEST2 테이블의 컬럼은 아래 CHECK 제약 조건에 의해 VARCHAR 형이지만 2자리 숫자 타입의 값만 받아들입니다.

--DROP TABLE TEST1;
--DROP TABLE TEST2;

CREATE TABLE TEST1(COL1 varchar(2)  CHECK( COL1 ~'[[:digit:]]{2}'));  -- 정규식 (regular expression)
CREATE TABLE TEST2(COL1 varchar(2)  CHECK( COL1 ~'[[:digit:]]{2}')); 

INSERT INTO TEST1 VALUES('01');
INSERT INTO TEST2 VALUES('12');
INSERT INTO TEST1 VALUES('9'); -- check 조건에 의해 에러발생

SELECT * FROM TEST1;
SELECT * FROM TEST2;

위 CHECK 조건을 만족하는 컬럼값이 많은 테이블에서 정의되어야 한다면, 매번 CHECK 조건을 적어주야 하니 번거롭겠죠?
이때 DOMAIN 을 활용하면 됩니다.

CREATE DOMAIN DIGITV AS VARCHAR(2) CHECK( VALUE ~'[[:digit:]]{2}');

DROP TABLE TEST1;
DROP TABLE TEST2;

CREATE TABLE TEST1(COL1 DIGITV);
CREATE TABLE TEST2(COL1 DIGITV);

INSERT INTO TEST1 VALUES('02');
INSERT INTO TEST2 VALUES('13');

SQL> \d test1;
    Table "public.test1"
 Column |  Type  | Modifiers 
--------+--------+-----------
 col1   | digitv

SQL> \d test2;
    Table "public.test2"
 Column |  Type  | Modifiers 
--------+--------+-----------
 col1   | digitv

SQL> select * from test;1
 col1 
------
 02
(1 rows)

SQL> select* from test2;
 col1 
------
 13
(1 row)

SQL> 


   

postgresdba.com