두 개의 테이블을 만들어 봅시다. 수도 테이블에는 상태가 포함되어 있습니다 도시 인 수도. 당연히 수도 테이블 도시에서 물려 받아야합니다.
테이블 도시 생성 ( 이름 텍스트, 모집단 플로트, 고도 int- (FT) ); 테이블 캐피탈 생성 ( 상태 문자 (2) ) 상속 (도시);
이 경우 캐피탈 행상속모든 속성 (이름, 모집단 및 고도) 부모, 도시로부터. 속성 이름의 유형입니다 이다텍스트, 네이티브토토 핫가변 길이를 입력하십시오 문자열. 속성 모집단의 유형은float, 네이티브토토 핫이중 정밀도를 입력하십시오 부동 소수점 번호. 주 수도에는 추가 속성이 있으며 상태는 상태를 보여줍니다. 안에토토 핫, 테이블은 0에서 상속 될 수 있습니다 더 많은 다른 테이블과 쿼리는 모든 행의 모든 행을 참조 할 수 있습니다. 테이블 또는 테이블의 모든 행과 모든 후손들.
참고 :상속 계층은 실제로 a입니다 지시 된 acyclic 그래프.
예를 들어 다음 쿼리는 모든 이름을 찾습니다. 고도에 위치한 주 수도를 포함한 도시 500 피트 이상 :
이름, 고도를 선택하십시오 도시에서 고도 500;
반환 :
이름 | 고도 -----------+--------- 라스 베이거스 | 2174 마리포사 | 1953 매디슨 | 845
반면에 다음 쿼리는 모든 도시를 찾습니다. 주 수도가 아니며 고도에 위치하고 있습니다. 500ft :
이름, 고도를 선택하십시오 도시에서만 여기서 고도 500; 이름 | 고도 -----------+--------- 라스 베이거스 | 2174 마리포사 | 1953
여기"만"도시 전에 쿼리는 도시에서만 실행되어야하며 상속 계층 구조의 도시 아래 표. 많은 우리가 이미 논의한 명령 -select, 업데이트and삭제- this 지원"만"표기법.
경우에 따라 특정 테이블을 알고 싶을 수도 있습니다. 행이 시작되었습니다. 라는 시스템 열이 있습니다.Tableoid각 테이블에서 원래 테이블 :
C.Tableoid, C.Name, C.Altitude를 선택하십시오 도시에서 c 여기서 c.altitude 500;
반환 :
Tableoid | 이름 | 고도 ----------+----------+---------- 139793 | 라스 베이거스 | 2174 139793 | 마리포사 | 1953 139798 | 매디슨 | 845
(이 예를 재현하려고하면 아마 다른 숫자 Oids.)와 함께pg_class실제 테이블을 볼 수 있습니다 이름 :
P.RelName, C.Name, C.Altitude를 선택하십시오 도시 C, pg_class p 여기서 c.altitude 500 및 c.tableoid = p.oid;
반환 :
Relname | 이름 | 고도 ----------+----------+---------- 도시 | 라스 베이거스 | 2174 도시 | 마리포사 | 1953 수도 | 매디슨 | 845
감가 상각 :이전 버전의토토 핫, 기본 동작은 그렇지 않았습니다 쿼리에 자식 테이블을 포함합니다. 이것은 것으로 밝혀졌습니다 오류가 발생하기 쉬우 며 SQL99 표준을 위반하고 있습니다. 기존 구문 아래에서, 당신이 부여하는 서브 테이블을 얻으려면*테이블 이름으로. 예를 들어
선택 *에서 도시에서 *;여전히 하위 테이블을 명시 적으로 지정할 수 있습니다 첨부*및 명시 적으로 작성하여 자식 테이블을 스캔하지 않음"만". 그러나 버전 7.1에서 시작하여 미개화 된 테이블 이름의 기본 동작은 스캔하는 것입니다. 기본값 이전에는 하위 테이블도 없지만 그래서. 이전 기본 동작을 얻으려면 구성을 설정하십시오 옵션SQL_INHERITANCE꺼짐, 예 :
sql_inheritance를 OFF로 설정하십시오;또는 라인 추가토토 핫.conf파일.
상속 기능의 제한은 인덱스입니다 (고유 한 제약 포함) 및 외국 주요 제약 조건 만 상속 자녀가 아닌 단일 테이블에 적용하십시오. 따라서, 위의 예에서는 다른 테이블의 열을 지정참조 도시 (이름)다른 테이블은 도시 이름을 포함하지만 자본 이름이 아닙니다. 이것 부족은 아마도 일부 릴리스에서 고정 될 것입니다.