검색결과 리스트
글
table inheritance(상속)
POSTGRESQL
2014. 10. 28. 10:40
postgreSQL은 테이블 생성시에 하나이상의 다른 테이블로부터의 상속기능을 제공합니다.
상속받은 테이블을 자식테이블, 상속대상 테이블을 부모테이블로 할때 자식테이블을 create table 시 INHERITS 옵션을 이용하여 부모테이블의 컬럼, check / not-null 제약조건을 상속받습니다.
아래는 자식테이블 생성 및 조회에 대한 예제입니다.
1. 부모테이블을 생성합니다.
2. cities 테이블을 상속받는 자식테이블 capitals을 IHERIT 구문을 이용하여 생성합니다.
3. 부모테이블에 대한 조회/수정/삭제 SQL은 자식테이블을 포함하여 조회/수정/삭제되며, only 옵션을 이용하여 하나의 테이블을 지정할 수 있습니다.
4. 상속받은 테이블을 부모테이블로 하는 또다른 자식테이블을 생성하면, 최상위 부모테이블에 대한 조회/수정/삭제질의는 전계층의 테이블을 포함합니다.
※ 가독성을 높히기 위해 부모테이블을 대상으로 하는 쿼리를 작성할 때 테이블 후미에 *를 붙여 상속테이블이 포함될 것임을 표시하는 것을 권장합니다.
예시) select * from cities*;
상속받은 테이블을 자식테이블, 상속대상 테이블을 부모테이블로 할때 자식테이블을 create table 시 INHERITS 옵션을 이용하여 부모테이블의 컬럼, check / not-null 제약조건을 상속받습니다.
아래는 자식테이블 생성 및 조회에 대한 예제입니다.
1. 부모테이블을 생성합니다.
postgres=# CREATE TABLE cities ( postgres(# name text, postgres(# population float, postgres(# altitude int -- in feet postgres(# ); CREATE TABLE postgres=# \d+ cities Table "public.cities" Column | Type | Modifiers | Storage | Description ------------+------------------+-----------+----------+------------- name | text | | extended | population | double precision | | plain | altitude | integer | | plain | Has OIDs: no
2. cities 테이블을 상속받는 자식테이블 capitals을 IHERIT 구문을 이용하여 생성합니다.
postgres=# CREATE TABLE capitals ( postgres(# state char(2) postgres(# ) INHERITS (cities); CREATE TABLE postgres=# \d+ capitals; Table "public.capitals" Column | Type | Modifiers | Storage | Description ------------+------------------+-----------+----------+------------- name | text | | extended | population | double precision | | plain | altitude | integer | | plain | state | character(2) | | extended | Inherits: cities Has OIDs: no
3. 부모테이블에 대한 조회/수정/삭제 SQL은 자식테이블을 포함하여 조회/수정/삭제되며, only 옵션을 이용하여 하나의 테이블을 지정할 수 있습니다.
postgres=# insert into cities values('kms',10.23,1000); INSERT 0 1 postgres=# insert into capitals values('kms',10.23,1000,'01'); INSERT 0 1 postgres=# select * from cities; name | population | altitude ------+------------+---------- kms | 10.23 | 1000 kms | 10.23 | 1000 (2 rows) ^ postgres=# select * from only cities; name | population | altitude ------+------------+---------- kms | 10.23 | 1000 (1 row)
4. 상속받은 테이블을 부모테이블로 하는 또다른 자식테이블을 생성하면, 최상위 부모테이블에 대한 조회/수정/삭제질의는 전계층의 테이블을 포함합니다.
postgres=# create table streets(col1 char(1)) inherits(capitals); insert into streets values ('kms',20.24,2100,02,'1'); INSERT 0 1 postgres=# select * from only cities; name | population | altitude ------+------------+---------- kms | 10.23 | 1000 (1 row) postgres=# select * from only capitals; name | population | altitude | state ------+------------+----------+------- kms | 10.23 | 1000 | 01 (1 row) postgres=# select * from streets; name | population | altitude | state | col1 ------+------------+----------+-------+------ kms | 20.24 | 2100 | 2 | 1 (1 row) postgres=# select * from cities; name | population | altitude ------+------------+---------- kms | 10.23 | 1000 kms | 10.23 | 1000 kms | 20.24 | 2100 (3 rows)
※ 가독성을 높히기 위해 부모테이블을 대상으로 하는 쿼리를 작성할 때 테이블 후미에 *를 붙여 상속테이블이 포함될 것임을 표시하는 것을 권장합니다.
예시) select * from cities*;
'POSTGRESQL' 카테고리의 다른 글
md5를 이용한 password hash value 구하기 (0) | 2014.11.26 |
---|---|
[9.4 beta]ALTER SYSTEM 구문을 이용한 파라메터 변경 (0) | 2014.10.29 |
max_connections 와 커널파라메터 (0) | 2014.10.27 |
postgresql DBLINK 예제 (0) | 2014.10.27 |
gdb로 postgresql backend process 디버깅하기 (0) | 2014.10.26 |