2025 년 9 월 4 일 :토토 결과 18 RC 1 릴리스!
이 문서는 지원되지 않는 버전의 토토 결과을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다토토 PostgreSQL : 문서 : 17 : 5.11버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

5.8. 계승

토토 결과토토 결과을 구현합니다 데이터베이스 설계자에게 유용한 도구가 될 수있는 상속. (SQL : 1999 및 나중에 유형 상속 기능을 정의합니다 여기에 설명 된 기능과 여러 측면에서 다릅니다.)

예로부터 시작합시다 : 우리가 구축하려고한다고 가정 해 봅시다. 도시의 데이터 모델. 각 주에는 많은 도시가 있지만 하나만 있습니다 수도. 우리는 수도를 빠르게 검색 할 수 있기를 원합니다. 특정 상태. 이것은 두 가지를 만들어 수행 할 수 있습니다 토토 결과, 하나는 주 수도 용 및 하나는 그렇지 않은 도시를위한 수도. 그러나 데이터를 요청하고 싶을 때 어떻게되는지 도시에 대해, 그것이 수도인지 여부에 관계없이? 그만큼 상속 기능은이 문제를 해결하는 데 도움이 될 수 있습니다. 우리는 정의합니다 그만큼캐피탈토토 결과이되도록하십시오 에서 상속도시:

토토 결과 도시 생성 (
    이름 텍스트,
    모집단 플로트,
    고도 int- 발
);

토토 결과 캐피탈 생성 (
    상태 문자 (2)
) 상속 (도시);

이 경우캐피탈토토 결과상속부모의 모든 열 토토 결과,도시. 주 수도 추가 열이 있습니다.State, 그 그들의 상태를 보여줍니다.

in토토 결과, 토토 결과이 할 수 있습니다 0 이상의 다른 토토 결과에서 상속되고 쿼리가 참조 할 수 있습니다. 토토 결과의 모든 행 또는 토토 결과의 모든 행과 그 모든 행 후손 토토 결과. 후자의 동작은 기본값입니다. 을 위한 예를 들어 다음 쿼리는 모든 도시의 이름을 찾습니다. 고도에 위치한 주 수도를 포함하여 500ft :

이름, 고도를 선택하십시오
    도시에서
    고도 500;

토토 결과튜토리얼 (섹션 2.1),이 보고:

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

반면에 다음 쿼리는 모든 도시를 찾습니다. 주 수도가 아니며 고도에 위치하고 있습니다. 500ft :

이름, 고도를 선택하십시오
    도시에서만
    여기서 고도 500;

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

여기전용키워드를 나타냅니다 쿼리는에만 적용되어야합니다.도시, 아래 토토 결과이 아님도시상속 계층에서. 많은 것들 우리가 이미 논의한 명령 -select, 업데이트and삭제- 지원전용키워드.

경우에 따라 특정 토토 결과을 알고 싶을 수도 있습니다. 행이 시작되었습니다. 라는 시스템 열이 있습니다.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

상속은 자동으로 데이터를 자동으로 전파하지 않습니다삽입또는COPY상속 계층의 다른 토토 결과에 명령. 우리에서 예, 다음삽입진술 실패 할 것입니다 :

도시에 삽입 (이름, 인구, 고도, 주)
값 ( 'New York', Null, Null, 'Ny');

우리는 데이터가 어떻게 든 라우팅되기를 바랍니다.캐피탈토토 결과이지만 그렇지 않습니다 일어나다:삽입항상 삽입하십시오 정확히 지정된 토토 결과. 어떤 경우에는 가능합니다 규칙을 사용하여 삽입을 리디렉션합니다 (참조34 장). 그러나 그것은 도움이되지 않습니다 위의 경우도시토토 결과 열이 포함되어 있지 않습니다State, 그리고 규칙이 될 수 있기 전에 명령이 거부됩니다. 적용된.

확인 제약 조건은 AN 내 토토 결과에서 정의 할 수 있습니다 상속 계층. 부모 토토 결과의 모든 확인 제약 조건 모든 어린이들에 의해 자동으로 상속됩니다. 다른 유형 그러나 제약은 상속되지 않습니다.

토토 결과은 하나 이상의 부모 토토 결과에서 상속 될 수 있습니다. 사례는 부모가 정의한 열의 통합을 가지고 있습니다. 토토 결과. Child Table의 정의에서 선언 된 모든 열은 다음과 같습니다 이것들에 추가되었습니다. 동일한 열 이름이 다중에 나타나는 경우 부모 토토 결과 또는 부모 토토 결과과 자녀의 정의,이 열은입니다."합병"따라서 그러한 열만 하나만 있습니다 어린이 토토 결과. 병합하려면 열에 동일한 데이터가 있어야합니다 유형, 그렇지 않으면 오류가 발생합니다. 병합 된 열에는 모든 수표 제약 조건의 사본은 열 정의는.

토토 결과 상속은 현재를 사용 하여만 정의 할 수 있습니다.PostgreSQL : 문서 : 8.1 : 토토 사이트 추천진술. 관련 진술토토 결과 작성 처럼상속을 지정할 수 없습니다. 아니요 기존 토토 결과을 어린이 토토 결과. 마찬가지로 상속을 제거 할 방법이 없습니다 아동 토토 결과에서 링크가 정의 된 후에는 토토 결과을 완전히 떨어 뜨립니다. 부모 토토 결과을 삭제할 수 없습니다 아이들 중 누구라도 남아 있습니다. 토토 결과을 제거하려면 그리고 그 후손들 모두, 쉬운 방법 중 하나는 부모를 떨어 뜨리는 것입니다 가있는 토토 결과캐스케이드옵션.

PostgreSQL : 문서 : 8.1 : 윈 토토 Table의지 열 데이터 정의의 변경 사항을 전파하고 확인하십시오 상속 계층 구조를 제한합니다. 다시, 떨어지는 부모 토토 결과의 열 또는 제약은 사용 사용캐스케이드옵션.Alter Table동일한 규칙을 따릅니다 중간에 적용되는 열 병합 및 거부토토 결과 생성.

5.8.1. 경고

토토 결과 액세스 권한은 자동으로 상속되지 않습니다. 따라서 부모 토토 결과에 액세스하려는 사용자는 모든 어린이에게 수술을 할 권한이 있습니다. 토토 결과도 사용하거나 사용해야합니다.전용표기법. 기존에 새 자식 토토 결과을 추가 할 때 상속 계층 구조, 필요한 모든 것을 부여하도록주의하십시오 그것에 대한 권한.

상속 기능의 심각한 제한은 그 것입니다 인덱스 (고유 한 제약 포함) 및 외국 키 제약 조건은 단일 토토 결과에만 적용됩니다 상속 어린이. 이것은 참조와 모두에 해당됩니다 외국 키 제약 조건의 참조 측면. 따라서, 위의 예 :

  • 우리가 선언 한 경우도시.이름고유 한또는 a기본 키, 이것은 멈추지 않을 것입니다캐피탈행이있는 토토 결과 이름을 복제하는 행으로도시. 그리고 그 중복 행은 기본값은 쿼리에 나타납니다.도시. 사실, 기본적으로캐피탈고유 한 제약은 없습니다 전혀, 동일하게 여러 행을 포함 할 수 있습니다. 이름. 당신은에 독특한 제약을 추가 할 수 있습니다캐피탈이지만 이것은 예방되지 않습니다 에 비해 복제도시.

  • 마찬가지로, 우리가 그것을 지정해야한다면도시.이름 참조다른 토토 결과, 이것 제약 조건은 자동으로 전파되지 않습니다캐피탈. 이 경우 작업 할 수 있습니다 수동으로 동일한 것을 추가하여 주변참조제약 조건캐피탈.

  • 다른 토토 결과의 열 지정참조 도시 (이름)다른 토토 결과은 도시 이름을 포함하지만 자본 이름은 아닙니다. 이 경우에는 좋은 해결 방법이 없습니다.

이러한 결함은 아마도 어떤 미래에 고정 될 것입니다 릴리스이지만 그 동안 상당한 치료가 필요합니다. 상속이 문제에 유용한 지 결정합니다.

감가 상각 :이전 버전의토토 결과, 기본 동작은 다음과 같습니다 쿼리에 자식 토토 결과을 포함하지 않아야합니다. 이것은 발견되었습니다 오류가 발생하기 쉬우 며 SQL을 위반하고 있습니다. 기준. 이전 구문 아래에 자식 토토 결과을 포함합니다 당신은 추가*토토 결과 이름으로. 예를 들어:

선택 *에서 도시에서 *;

여전히 하위 토토 결과 스캔을 명시 적으로 지정할 수 있습니다 추가로*뿐만 아니라 서면으로 자식 토토 결과을 스캔하지 않도록 명시 적으로 지정전용. 그러나 버전에서 시작합니다 7.1, 미개화 된 토토 결과 이름의 기본 동작은 다음과 같습니다. 기본값 전에는 자식 토토 결과도 스캔하려면 그렇게하지 않았습니다. 이전 기본 동작을 얻으려면 비활성화하십시오 그만큼SQL_INHERITANCE구성 옵션.