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

제8장. 상속

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

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

CREATE TABLE 대문자(
    상태 문자(2)
) 상속(도시);

이 경우 대문자 행상속모든 속성(이름, 인구 및 고도)를 상위 도시로부터 가져옵니다. 속성 이름의 유형 이다텍스트, 원주민포스트그레SQL가변 길이 ASCII용 유형 문자열. 속성 채우기 유형은 다음과 같습니다.플로트, 원주민포스트그레SQL배정밀도용 유형 부동 소수점 숫자. 주 수도에는 추가 속성이 있습니다. 상태는 자신의 상태를 보여줍니다. 안에포스트그레SQL, 롤 토토은 0 또는 더 많은 롤 토토이 있으며 쿼리는 롤 토토의 모든 행을 참조할 수 있습니다. 롤 토토 또는 롤 토토의 모든 행과 모든 하위 항목.

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

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

SELECT 이름, 고도
    도시에서
    고도  500;

반환:

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

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

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

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

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

어떤 경우에는 특정 테이블이 어떤 테이블인지 알고 싶을 수도 있습니다. 튜플은 다음에서 유래되었습니다. 라는 시스템 열이 있습니다.TABLEOID각 롤 토토에 있는 내용을 통해 원본 롤 토토:

SELECT c.tableoid, c.이름, c.고도
    도시에서 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 |
+---------+----------+----------+

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

SELECT * 도시에서*;

다음을 통해 하위 테이블 스캔을 명시적으로 지정할 수 있습니다. 추가*및 명시적으로 작성하여 하위 롤 토토을 스캔하지 않도록 지정"만". 하지만 버전 7.1부터 장식되지 않은 테이블 이름의 기본 동작은 테이블 이름을 스캔하는 것입니다. 하위 테이블도 마찬가지입니다. 이전에는 기본값을 사용하지 않았습니다. 그래서. 이전 기본 동작을 얻으려면 구성을 설정하십시오. 옵션SQL_Inheritance끄기, 예를 들어,

SQL_Inheritance를 OFF로 설정;

또는 다음 줄을 추가하세요.postgresql.conf파일.

상속 기능의 제한은 색인이 (고유 제약 조건 포함) 및 외래 키 제약 조건만 상속된 하위 항목이 아닌 단일 테이블에 적용됩니다. 따라서, 위의 예에서는 다른 테이블의 열을 지정합니다.참조 도시(이름)허용할 것입니다 도시 이름은 포함하지만 대문자 이름은 포함하지 않는 다른 롤 토토입니다. 이 결함은 아마도 향후 릴리스에서 수정될 것입니다.