PostgreSQL 은 특이하게도 테이블 생성시에 그 테이블을 대한 custom type 형을 자동으로 생성합니다.
무슨 말이냐고요? 글쎄요 적고나니 저도 어렵네요.
이럴땐 무조건 예제로 살펴봐야죠.
SQL> CREATE TABLE XT(A INT, B TEXT);
CREATE TABLE
SQL> INSERT INTO XT VALUES(1, 'SUPERMAN');
INSERT 0 1
SQL> INSERT INTO XT VALUES(2, 'SPIDERMAN');
INSERT 0 1
SQL> SELECT * FROM XT -- XT 는 테이블명입니다. 여기까지는 껌입니다.
;
a | b
---+-----------
1 | SUPERMAN
2 | SPIDERMAN
(2 rows)
-- 아래 TEST 테이블의 생성 구문을 자세히 살펴보세요.
-- 테이블명인 XT 를 컬럼 타입처럼 사용했습니다. PostgreSQL 에서는 이런게 가능하다는 얘깁니다.
SQL> CREATE TABLE TEST(C INT, D XT, E XT[]);
CREATE TABLE
SQL>
SQL> INSERT INTO TEST VALUES(0, ROW(3,'HULK')::XT, ARRAY[ROW(3,'HULK'),ROW(4,'BATMAN')]::XT[]);
INSERT 0 1
SQL> SELECT * FROM TEST;
c | d | e
---+----------+---------------------------
0 | (3,HULK) | {"(3,HULK)","(4,BATMAN)"}
(1 row)
참 특이한 기능이네요~