이 문서는 지원되지 않는 버전의 범퍼카 토토QL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다범퍼카 토토 캔 : 문서 : 17 : 39 장버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

17 장.범퍼카 토토규칙 시스템

저자 :Jan Wieck에 의해 작성되었습니다. 7.1에 대한 업데이트 톰 레인.

생산 규칙 시스템은 개념적으로 간단하지만 있습니다 실제로 사용하는 데 관련된 많은 미묘한 점이 있습니다. 이것들 중 일부 요점과 이론적 기초범퍼카 토토규칙 시스템을 찾을 수 있습니다 [Stonebraker et al, ACM, 1990].

일부 다른 데이터베이스 시스템은 활성 데이터베이스 규칙을 정의합니다. 이들은 일반적으로 저장된 절차와 트리거이며입니다 구현범퍼카 토토AS 기능과 트리거.

쿼리 재 작성 규칙 시스템 (지금부터 "규칙 시스템") 저장된 절차 및 트리거와 완전히 다릅니다. 그것 규칙을 고려하여 쿼리를 수정 한 다음 고려합니다 수정 된 쿼리를 계획을 위해 쿼리 플래너에 전달하고 실행. 그것은 매우 강력하며 많은 것들에 사용될 수 있습니다. 쿼리 언어 절차, 뷰 및 버전과 같은 힘 이 규칙 시스템 중 [에서 논의됩니다.Ong and Goh, 1990] 및 [Stonebraker et al, ACM, 1990].

17.1. 무엇 querytree입니까?

규칙 시스템이 어떻게 작동하는지 이해하려면 필요합니다. 그것이 언제 호출되었는지, 그 입력과 결과가 무엇인지 알고 있습니다.

규칙 시스템은 쿼리 파서와 입안자. 파서의 출력, 하나의 쿼리 트리 및 의 재 작성 규칙pg_rewrite카탈로그, 일부 추가 정보가 포함 된 쿼리 트리이기도합니다. 결과적으로 0 또는 많은 쿼리 트리를 생성합니다. 그래서 입력과 출력은 항상 파서 자체가 생산할 수있는 것입니다. 따라서, 그것이 보는 것은 기본적으로로 표현할 수 있습니다.SQL진술.

이제 쿼리 트리는 무엇입니까? 그것은 내부 표현입니다SQL싱글의 진술 그것을 건축 한 부품은 별도로 저장됩니다. 이 쿼리 트리는입니다 시작할 때 표시범퍼카 토토Debuglevel 4와 함께 백엔드 대화식 백엔드 인터페이스에 쿼리를 입력합니다. 규칙 의 행동pg_rewrite시스템 카탈로그는 또한 QueryTrees로 저장됩니다. 그들은 형식화되지 않았습니다 디버그 출력과 마찬가지로 정확히 동일합니다. 정보.

querytree를 읽는 데 약간의 경험이 필요하며 규칙 시스템에서 작업하기 시작했을 때 어려움을 겪었습니다. 나는 할 수있다 내가 커피 머신에 서 있었고 나는 대상리스트, 물 및 커피 가루에 컵 rangetable과 자격 표현의 모든 버튼. 부터SQL표현 쿼리 트리는 규칙 시스템을 이해하기에 충분합니다 문서는 읽는 방법을 가르치지 않습니다. 도움이 될 수 있습니다 그것을 배우고 나중에 이름 지정 규칙이 필요합니다. 다음 묘사.

17.1.1. querytree의 일부

읽을 때SQL이 문서에서 쿼리 트리의 표현입니다 진술이 QueryTree 구조에있을 때 고장납니다. 부분 querytree의

CommandType

이것은 어떤 명령을 알려주는 간단한 값입니다 (선택, 삽입, 업데이트, 삭제) 생성 Parsetree.

rangetable

Rangetable은 사용되는 관계 목록입니다. 쿼리에서. 선택된 진술에서 이것들은 다음과 같습니다 키워드에서 나온 관계.

모든 rangetable 항목은 테이블이나보기를 식별합니다 다른 부분에서 어떤 이름으로 호출되는지 알려줍니다. 쿼리의. querytree에서는 rangetable 항목이 있습니다 이름보다는 색인으로 참조되므로 여기에 중복 이름이 있든 상관 없습니다. 에서SQL진술. 이것 규칙의 순수성이 있었을 때 발생할 수 있습니다 병합.이 문서의 예에는 이 상황.

결과적으로

이것은 식별하는 rangetable에 대한 색인입니다 쿼리 결과가가는 관계.

쿼리 선택 일반적으로 결과가 없습니다 관계. 선택의 특별한 경우는 대부분입니다 생성 테이블과 동일하고 삽입 ... 시퀀스를 선택하십시오 여기에서 별도로 논의되지 않습니다.

insert, 업데이트 및 삭제 결과는 테이블 (또는보기!)입니다 변경 사항이 적용됩니다.

TargetList

TargetList는 정의하는 표현식 목록입니다 쿼리의 결과. SELECT의 경우 표현식은 최종 출력을 구축하는 것입니다 질문. 그것들은 select와 사이의 표현입니다 키워드에서. (*는 모두에게 약어입니다 관계의 속성 이름. 확장됩니다 개별 속성에 대한 구문 분석기 시스템은 그것을 보지 못합니다.)

삭제 쿼리는 대상 목록이 필요하지 않습니다 결과를 얻지 마십시오. 실제로 플래너는 추가 할 것입니다 빈 대상 목록에 특별한 CTID 항목. 그러나 이것은 규칙 시스템 이후이며 나중에 논의됩니다. 규칙 시스템의 경우 TargetList가 비어 있습니다.

삽입 쿼리에서 TargetList는 새를 설명합니다 결과로 들어가야하는 행. 그것은입니다 값 조항의 표현 또는 insert에서 절을 선택하십시오 ... 선택. 누락 된 열 결과는 플래너에 의해 채워집니다 끊임없는 귀무 표현으로.

업데이트 쿼리에서 TargetList는 새로운 것을 설명합니다 오래된 것들을 대체 해야하는 행. 규칙에서 시스템에는 세트의 표현식 만 포함되어 있습니다 속성 = 쿼리의 표현 부분. 플래너 표현식을 삽입하여 누락 된 열을 추가합니다 이전 행의 값을 새 행으로 복사하십시오. 그리고 삭제와 마찬가지로 특수 CTID 항목을 추가합니다. 도.

TargetList의 모든 항목에는 표현식이 포함되어 있습니다 그것은 일정한 값이 될 수 있으며, 가변을 가리키는 변수 Rangetable의 관계 중 하나의 속성, 매개 변수 또는 기능으로 만든 식 트리 통화, 상수, 변수, 운영자 등

자격

쿼리의 자격은 매우 표현입니다 TargetList 항목에 포함 된 것 중 하나입니다. 그만큼 이 표현의 결과 가치는 작업 (삽입, 업데이트, 삭제 또는 선택) 인 경우 최종 결과 행은 실행 여부를 실행해야합니다. 그것은 AN의 WHERE 절SQL진술.

가입 트리

쿼리의 조인 트리는 그 구조를 보여줍니다 절에서. a, b, select와 같은 간단한 쿼리의 경우 C 조인 트리는 단지 항목의 목록 일뿐입니다. 우리는 어떤 순서로든 그들을 합류 할 수 있기 때문입니다. 하지만 Expressions --- 특히 OUTER 조인 --- 사용됩니다. 가입. 조인 트리는 조인의 구조를 보여줍니다 표현. 관련된 제한 특정 조인 조항 (ON 또는 사용 표현 또는 사용) 첨부 된 자격 표현으로 저장됩니다 그 사람들은 트리 노드에 가입합니다. 편리한 것으로 판명되었습니다 표현을 자격으로 최상위 수준을 저장하십시오 최상위 수준의 조인 트리 항목에도 첨부됩니다. 그래서 실제로 결합 트리는 출처와 위치를 모두 나타냅니다. 선택의 조항.

다른 사람

주문과 같은 쿼리 트리의 다른 부분 절은 여기에 관심이 없습니다. 규칙 시스템 규칙을 적용하는 동안 입력을 대체하지만 그것은 기초와 관련이 없습니다. 규칙 시스템.