#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=>
}}}