이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

제8장. 상속

두 개의 사설 토토을 생성합시다. Capitals 사설 토토에는 상태가 포함되어 있습니다. 도시이기도 한 수도. 당연히 대문자 사설 토토은 도시에서 상속받아야 합니다.

사설 토토 도시 생성(
    이름 텍스트,
    인구 부동,
    고도 int -- (피트 단위)
);

CREATE TABLE 대문자(
    상태 문자(2)
) 상속(도시);
이 경우 대문자 행상속모든 속성(이름, 인구 및 고도)를 상위 도시로부터 가져옵니다. 속성 이름의 유형 이다텍스트, 원주민포스트그레6037_6122플로트, 네이티브포스트그레이중 입력 정밀 부동 소수점 숫자. 주도에는 추가 비용이 있습니다. 상태를 보여주는 속성, 상태. 안에포스트그레, 사설 토토은 0 또는 더 많은 사설 토토이 있으며 쿼리는 사설 토토의 모든 행을 참조할 수 있습니다. 사설 토토 또는 사설 토토의 모든 행과 모든 하위 항목.

참고:상속 계층 구조는 실제로 방향성 비순환 그래프.

예를 들어, 다음 쿼리는 모든 이름을 찾습니다. 주도를 포함한 고도에 위치한 도시 500피트 이상:

SELECT 이름, 고도
    도시에서
    고도  500;
반환:
+----------+----------+
|이름 | 고도 |
+---------+----------+
|라스베가스 | 2174 |
+---------+----------+
|마리포사 | 1953년 |
+---------+----------+
|매디슨 | 845 |
+---------+----------+

반면에 다음 쿼리는 모든 도시를 찾습니다. 주도가 아니고 고도에 위치한 곳 500피트 이상:

SELECT 이름, 고도
    도시에서만
    고도  500인 곳;

+---------+----------+
|이름 | 고도 |
+---------+----------+
|라스베가스 | 2174 |
+---------+----------+
|마리포사 | 1953년 |
+---------+----------+

여기"만"도시 전 쿼리가 도시에서만 실행되어야 함을 나타냅니다. 상속 계층의 도시 아래에 있는 테이블입니다. 많은 이미 논의한 명령 --선택, 업데이트그리고삭제-- 이것을 지원하세요"만"표기법.

어떤 경우에는 특정 테이블이 어떤 것인지 알고 싶을 수도 있습니다. 튜플은 다음에서 유래되었습니다. 라는 시스템 열이 있습니다."TABLEOID"각 테이블에서 다음을 수행할 수 있습니다. 원래 테이블을 알려주세요:

SELECT c.tableoid, c.name, c.altitude
    도시에서 c
    c.altitude  500;
반환:
+---------+----------+----------+
|사설 토토로이드 |이름 | 고도 |
+---------+----------+----------+
|37292 |라스베가스 | 2174 |
+---------+----------+----------+
|37280 |마리포사 | 1953년 |
+---------+----------+----------+
|37280 |매디슨 | 845 |
+---------+----------+----------+
pg_class로 조인하면 실제 사설 토토을 볼 수 있습니다 이름:
SELECT p.relname, c.name, c.altitude
    도시 c, pg_class p에서
    여기서 c.altitude  500 및 c.tableoid = p.oid;
반환:
+---------+----------+----------+
|relname |이름 | 고도 |
+---------+----------+----------+
|수도 |라스베가스 | 2174 |
+---------+----------+----------+
|도시 |마리포사 | 1953년 |
+---------+----------+----------+
|도시 |매디슨 | 845 |
+---------+----------+----------+

지원 중단됨:이전 버전에서는포스트그레스, 기본값은 가져오지 않는 것이었습니다. 하위 테이블에 대한 액세스. 이는 오류가 발생하기 쉬운 것으로 확인되었으며 또한 SQL99를 위반합니다. 이전 구문에서 다음을 얻으려면 하위 테이블은 테이블 이름에 "*"를 추가합니다. 에 대한 예

SELECT * 도시에서*;
다음을 통해 하위 테이블 스캔을 명시적으로 지정할 수 있습니다. "*"를 추가하고 하위 항목을 스캔하지 않도록 명시적으로 지정 작성하여 테이블"만". 하지만 시작 버전 7.1에서는 장식되지 않은 테이블 이름에 대한 기본 동작 하위 테이블도 스캔하는 것이지만 이전에는 기본값이 아니었습니다. 그렇게 하려면. 이전 기본 동작을 얻으려면 구성을 설정하십시오. 옵션SQL_Inheritance끄기, 예:
SQL_Inheritance를 OFF로 설정;
또는 다음 줄을 추가하세요.postgresql.conf파일.