생산 무지개 토토 시스템은 개념적으로 간단하지만 있습니다 실제로 사용하는 데 관련된 많은 미묘한 점이 있습니다. 이것들 중 일부 요점과 이론적 기초Postgres무지개 토토 시스템을 찾을 수 있습니다 [Stonebraker et al, ACM, 1990].
일부 다른 데이터베이스 시스템은 활성 데이터베이스 무지개 토토을 정의합니다. 이것들 일반적으로 저장된 절차 및 트리거이며에서 구현됩니다.Postgres함수로 트리거.
쿼리 재 작성 무지개 토토 시스템 (지금부터 "무지개 토토 시스템")은 저장된 절차 및 트리거와는 완전히 다릅니다. 수정합니다 규칙을 고려한 다음 실행을 위해 쿼리 최적화기에 대한 쿼리를 수정했습니다. 그것은 매우입니다 강력하고 쿼리 언어와 같은 많은 것들에 사용할 수 있습니다. 절차,보기 및 버전. 이 무지개 토토 시스템의 힘은 다음과 같습니다 [에서 논의Ong and Goh, 1990] 및 [Stonebraker et al, ACM, 1990].
무지개 토토 시스템의 작동 방식을 이해하려면 알아야합니다. 그것이 호출되고 입력과 결과가 무엇인지.
무지개 토토 시스템은 쿼리 파서와 최적화. 파서의 출력, 하나의 쿼리 트리 및 의 재 작성 규칙pg_rewrite카탈로그는 추가 정보가 포함 된 쿼리 트리입니다. 결과적으로 0 또는 많은 쿼리 트리를 만듭니다. 따라서 입력 및 출력입니다 파서 자체가 항상 생산할 수있는 것들이므로 그것이 보는 것은 기본적으로로 표현할 수 있습니다.SQL진술.
이제 쿼리 트리는 무엇입니까? 그것은 내부 표현입니다SQL단일 부품의 진술 그것을 만들어 낸 것은 별도로 저장됩니다. 이 쿼리 트리는 보입니다 시작할 때Postgres백엔드 디버그 레벨 4 및 대화식 백엔드에 쿼리를 입력하여 인터페이스. 의 무지개 토토 조치pg_rewrite시스템 카탈로그도 저장됩니다 쿼리 트리. 그들은 디버그 출력과 같이 형식화되지 않았지만 정확히 동일한 정보를 포함합니다.
querytree를 읽는 데 약간의 경험이 필요하며 어려웠습니다. 무지개 토토 시스템에서 작업하기 시작한 시간. 나는 그것을 기억할 수있다 나는 커피 머신에 서 있었고 나는 컵을 Rangetable의 Target리스트, 물 및 커피 가루 자격 표현의 버튼. 부터SQLQueryTree의 표현으로 충분합니다 무지개 토토 시스템을 이해하기 위해이 문서는 방법을 가르치지 않습니다. 읽으십시오. 배우는 데 도움이 될 수 있으며 이름 지정 규칙은 다음 설명에 필요합니다.
읽을 때SQL이 문서에서 QueryTrees의 표현이 필요합니다. 부분을 식별 할 수 있으려면 진술이 QueryTree 구조에 있습니다. querytree의 일부는입니다.
이것은 어떤 명령을 알려주는 간단한 값입니다 (select, 삽입, 업데이트, 삭제) Parsetree를 생성했습니다.
Rangtable은 질문. 이후에 주어진 관계 인 선정 된 진술에서 키워드에서.
모든 rangetable 항목은 테이블이나보기를 식별하고 말합니다. 이름으로 쿼리의 다른 부분에서 호출됩니다. ~ 안에 querytree rangetable 항목은 색인에 의해 참조됩니다 이름보다는 대신 여기에 있든 상관 없습니다. 중복 이름과 마찬가지로SQL진술. 이것은 이후에 일어날 수 있습니다 Rangetables의 규칙이 병합되었습니다. 문서는 이러한 상황이 없습니다.
이것은 쿼리 결과가가는 관계.
쿼리 선택은 일반적으로 결과 관계가 없습니다. 그만큼 선택의 특별한 경우는 대부분 생성과 동일합니다. 테이블, 삽입 ... 시퀀스를 선택하고 논의되지 않습니다 별도로 여기.
insert, 업데이트 및 삭제 쿼리 쿼리입니다 변경 사항이 적용되는 테이블 (또는보기).
TargetList는 쿼리 결과. 선택의 경우 표현식 쿼리의 최종 출력을 구축하는 것입니다. 그들은입니다 SELECT와 From Keywords 간의 표현식 (*는 그냥 관계의 모든 속성 이름에 대한 약어).
쿼리 삭제 삭제에는 대상 목록이 필요하지 않기 때문에 대상 목록이 필요하지 않습니다 모든 결과를 생성합니다. 실제로 Optimizer는 특별한 것을 추가합니다 빈 target 목록에 입력합니다. 그러나 이것은 규칙 이후입니다 시스템 및 나중에 논의 될 것입니다. 무지개 토토 시스템의 경우 TargetList는 비어 있습니다.
삽입 쿼리에서 TargetList는 새로운 행을 설명합니다. 결과로 들어가야합니다. 누락 된 열 상수를 가진 Optimizer에서 결과가 추가됩니다. 널 표현. 값 조항의 표현입니다 Insert의 선택 조항에서 얻은 것 ... select.
업데이트 쿼리에서는 새로운 행을 설명합니다. 오래된 것들을 교체하십시오. 여기에서 Optimizer는 누락됩니다 값을 새로운 행으로 오래된 줄. 그리고 특별한 항목을 추가합니다 삭제도 마찬가지입니다. 세트의 표현입니다 속성 = 쿼리의 표현 부분.
TargetList의 모든 항목에는 표현이 포함되어 있습니다 일정한 값이 될 수 있으며, 속성을 가리키는 변수입니다. Rangetable의 관계 중 하나, 매개 변수 또는 기능 호출, 상수, 변수로 만들어진 표현 트리 연산자 등
쿼리 자격은 그 중 하나와 매우 유사한 표현입니다. TargetList 항목에 포함 된 것. 결과 값 이 표현은 작업이 작동하는지 알려주는 부울입니다. 최종 결과 행의 경우 (삽입, 업데이트, 삭제 또는 선택) 실행 여부는 실행해야합니다. 그것은 an의 절차입니다.SQL진술.
QueryTree의 다른 부분은 순서 별 절을 통해 여기에 관심이 있습니다. 무지개 토토 시스템은 항목을 대체합니다 규칙을 적용하는 동안 거기에 있지만 할 일은 많지 않습니다. 무지개 토토 시스템의 기본 사항과 함께. 그룹은 특별합니다 보기 정의에 나타나고 여전히 필요할 때 문서화.