2025년 9월 25일:토토 커뮤니티 : 토토
이 문서는 지원되지 않는 젠 토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 PostgreSQL : 문서 : 17 : 5.11. 계승버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

5.5. 상속

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

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

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

이 경우 대문자 행상속모든 속성(이름, 인구 및 고도)를 상위 도시로부터 가져옵니다. 주도에는 추가 비용이 있습니다. 상태를 보여주는 속성, 상태. 에서젠 토토, 젠 토토은 0 또는 더 많은 젠 토토이 있으며 쿼리는 젠 토토의 모든 행을 참조할 수 있습니다. 젠 토토 또는 젠 토토의 모든 행과 모든 하위 항목.

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

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

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

반환:

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

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

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

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

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

지원 중단됨:이전 버전에서포스트그레SQL, 기본 동작은 다음과 같습니다. 쿼리에 하위 테이블을 포함합니다. 이는 다음과 같은 것으로 밝혀졌습니다. 오류가 발생하기 쉽고 SQL:1999도 위반합니다. 표준. 이전 구문에서 하위 테이블을 얻으려면 추가*젠 토토 이름에. 에 대한 예

SELECT * 도시에서*;

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

SQL_Inheritance를 OFF로 설정;

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

어떤 경우에는 특정 젠 토토이 어떤 젠 토토인지 알고 싶을 수도 있습니다. 행이 시작되었습니다. 라는 시스템 열이 있습니다.젠 토토로이드각 테이블에 있는 내용은 다음과 같습니다. 원본 테이블:

SELECT c.tableoid, c.이름, c.고도
도시에서 c
c.altitude  500;

반환:

젠 토토로이드 |   이름 | 고도
--------+------------+----------
   139793 | 라스베가스 |     2174
   139793 | 마리포사 |     1953년
   139798 | 매디슨 |      845

(이 예를 재현하려고 하면 아마도 다음과 같은 결과를 얻게 될 것입니다. 다른 숫자 OID.) 다음과 조인을 수행하여pg_class실제 젠 토토을 볼 수 있습니다 이름:

SELECT p.relname, c.name, c.altitude
도시 c, pg_class p에서
여기서 c.altitude  500 및 c.tableoid = p.oid;

반환:

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

테이블은 하나 이상의 상위 테이블에서 상속될 수 있습니다. 상위 테이블에서 정의한 열의 통합이 있는 경우 (하위 테이블에 대해 특별히 선언된 모든 열 포함).

상속 기능의 심각한 제한은 다음과 같습니다. 인덱스(고유 제약 조건 포함) 및 외래 키 제약 조건은 상속이 아닌 단일 테이블에만 적용됩니다. 아이들. 이는 참조하는 항목과 참조하는 항목 모두에 해당됩니다. 외래 키 제약 조건의 측면. 따라서, 위의 예:

  • 우리가 선언한다면도시.이름에 수고유또는 a기본 키, 이것은 멈추지 않을 것입니다.대문자행이 있는 테이블 이름이 행을 복제하는 경우도시. 그리고 그 중복 행은 기본적으로 다음의 쿼리에 표시됩니다.도시. 실제로 기본적으로대문자다음에는 고유 제약 조건이 없습니다. 모두 동일한 이름을 가진 여러 행이 포함될 수 있습니다. 고유 제약 조건을 추가할 수 있습니다.대문자, 하지만 이것이 방해가 되지는 않습니다. 중복과 비교도시.

  • 마찬가지로 우리가 그것을 지정한다면도시.이름 참조다른 젠 토토, 이것은 제약 조건이 자동으로 전파되지 않습니다.대문자. 이 경우에는 일할 수 있습니다. 수동으로 추가하여 주변에 동일한 내용을 추가합니다.참조다음으로 제한대문자.

  • 다른 젠 토토의 열을 지정참조 도시(이름)다른 쪽도 허용하겠습니다 도시 이름은 포함하지만 대문자 이름은 포함하지 않는 테이블입니다. 있다 이 경우에는 좋은 해결 방법이 없습니다.

이러한 결함은 아마도 미래에 수정될 것입니다 하지만 그 동안에는 상당한 주의가 필요합니다. 상속이 문제에 유용한지 여부를 결정합니다.