#title PostgreSQL 상속 [[TableOfContents]] {{{ CREATE TABLE capitals ( name text, population real, altitude int, -- (in ft) state char(2) ); CREATE TABLE non_capitals ( name text, population real, altitude int -- (in ft) ); }}} 두 테이블을 만들어 다음과 같은 뷰를 만들면 모든 결과를 볼 수 있다. {{{ CREATE VIEW cities AS SELECT name, population, altitude FROM capitals UNION SELECT name, population, altitude FROM non_capitals; }}} PostgreSQL은 상속이 가능하다. 그러므로 다음과 같은 상속이 가능하다. 쩝... 생소하닷!! 메뉴얼의 예제는 도통 이해가 가지 않아 웹의 자료를 찾아보니 대충 이해가 간다. {{{ SELECT name, altitude FROM cities WHERE altitude > 500; which returns: name | altitude -----------+---------- Las Vegas | 2174 Mariposa | 1953 Madison | 845 (3 rows) }}} 위의 쿼리는 altitude가 500보다 큰 것을 가져와라이다. 이것은 capitals 테이블의 것 까지 포함하여 모두 가져온다. 즉, WHERE altitude > 500 조건은 cities 테이블에서만 통한다는 것이다. 그러므로 capitals 테이블에는 조건이 없는 것이나 마찬가지 이므로 값이 나오는 것이다. 만약 cities 테이블의 것만 가져오고 싶다면 FROM 절에 Only 키워드를 사용하면 된다. {{{ SELECT name, altitude FROM ONLY cities WHERE altitude > 500; name | altitude -----------+---------- Las Vegas | 2174 Mariposa | 1953 (2 rows) }}} {{{ CREATE TABLE city ( name text, population real, altitude int -- (in ft) ); CREATE TABLE capitals ( state char(2) ) INHERITS (city); insert into capitals(name, population, altitude, state) values('Las Vegas', 1234, 2174, 'LA'); insert into capitals(name, population, altitude, state) values('Las Vegas', 1234, 1953, 'SA'); insert into capitals(name, population, altitude, state) values('Las Vegas', 1234, 845, 'SA'); }}} {{{ Pervasive Demo DB=> SELECT name, altitude Pervasive Demo DB-> FROM city Pervasive Demo DB-> WHERE altitude > 500; name | altitude -----------+---------- Las Vegas | 2174 Las Vegas | 1953 Las Vegas | 845 (3 rows) Pervasive Demo DB=> select name, altitude Pervasive Demo DB-> from only city Pervasive Demo DB-> where altitude > 500; name | altitude ------+---------- (0 rows) Pervasive Demo DB=> select * from only city; name | population | altitude ------+------------+---------- (0 rows) Pervasive Demo DB=> select * from city; name | population | altitude -----------+------------+---------- Las Vegas | 1234 | 2174 Las Vegas | 1234 | 1953 Las Vegas | 1234 | 845 (3 rows) Pervasive Demo DB=> select * from altitude; ERROR: relation "altitude" does not exist Pervasive Demo DB=> select * from capitals; name | population | altitude | state -----------+------------+----------+------- Las Vegas | 1234 | 2174 | LA Las Vegas | 1234 | 1953 | SA Las Vegas | 1234 | 845 | SA (3 rows) Pervasive Demo DB=> }}}