이 장에서 와이즈 토토 시스템에 대해 설명합니다PostgreSQL. 생산 와이즈 토토 시스템입니다 개념적으로 간단하지만 많은 미묘한 점이 있습니다. 실제로 그들을 사용합니다.
일부 다른 데이터베이스 시스템은 활성 데이터베이스 와이즈 토토을 정의하고, 일반적으로 저장된 절차 및 트리거입니다. 안에PostgreSQL, 이들은 사용하여 구현할 수 있습니다 기능과 트리거도 있습니다.
규칙 시스템 (보다 정확하게 말하면 쿼리가 다시 작성됩니다 규칙 시스템)은 저장된 절차와 완전히 다릅니다 트리거. 규칙을 고려하기 위해 쿼리를 수정합니다. 그런 다음 수정 된 쿼리를 쿼리 플래너에 전달합니다. 계획 및 실행. 매우 강력하며 사용될 수 있습니다 쿼리 언어 절차, 뷰 및와 같은 많은 것들 버전. 이론적 기초 와이 규칙의 힘 시스템도에서 논의됩니다.데이터베이스의 와이즈 토토, 절차, 캐싱 및보기에 대한 시스템및통합 생산 와이즈 토토을 사용하여 버전 모델링을위한 프레임 워크 데이터베이스 시스템.
규칙 시스템이 어떻게 작동하는지 이해하려면 필요합니다. 그것이 언제 호출되었는지, 그 입력과 결과가 무엇인지 알고 있습니다.
규칙 시스템은 파서와 입안자. 파서의 출력, 하나의 쿼리 트리 및 사용자 정의 재 작성 규칙은 다음과 같은 쿼리 트리입니다. 몇 가지 추가 정보가 있고 0 이상의 쿼리 트리를 만듭니다. 결과. 그래서 입력과 출력은 항상 파서입니다. 그 자체가 생산할 수 있었기 때문에 그것이 보는 것은 기본적으로 대표SQL진술.
이제 쿼리 트리는 무엇입니까? 그것은 내부 표현입니다 의SQL진술서 구축 된 단일 부품은 별도로 저장됩니다. 이 쿼리 트리는 설정하면 서버 로그에 표시 될 수 있습니다. 구성 매개 변수debug_print_parse, debug_print_rewritten또는debug_print_plan. 와이즈 토토 조치도 있습니다 시스템 카탈로그에 쿼리 트리로 저장pg_rewrite. 그들은 형식처럼 형식화되지 않습니다 로그 출력이지만 정확히 동일한 정보를 포함합니다.
원시 쿼리 트리를 읽는 데 약간의 경험이 필요합니다. 하지만 이후SQL쿼리 표현 나무는 와이즈 토토 시스템을 이해하기에 충분합니다 장을 읽는 방법을 가르치지 않을 것입니다.
읽을 때SQL이 장에서 쿼리 트리의 표현은 다음과 같습니다. 진술이 쿼리 트리 구조에있을 때 고장납니다. 부분 쿼리 트리의
이것은 어떤 명령을 알려주는 간단한 값입니다 (select, 삽입, 업데이트, 삭제) 쿼리를 생성했습니다 나무.
범위 테이블은 사용되는 관계 목록입니다. 쿼리에서. 에서select진술 이들은 이후에 주어진 관계입니다.From키 단어.
모든 범위 테이블 항목은 테이블 또는 뷰를 식별합니다. 다른 이름으로 어떤 이름이 호출되는지 알려줍니다. 쿼리. 쿼리 트리에서 범위 테이블 항목은 다음과 같습니다 이름보다는 숫자로 참조됩니다. 중복 이름이 있든 상관 없습니다. 에서SQL진술. 규칙의 범위 테이블이 발생한 후에 발생할 수 있습니다. 병합.이 장의 예제는 이 상황.
이것은 식별하는 범위 테이블에 대한 색인입니다. 쿼리 결과가가는 관계.
select쿼리는 일반적으로 그렇지 않습니다 결과 관계가 있습니다. A의 특별한 경우선택대부분 A와 동일합니다테이블 생성뒤 따르는삽입 ... 선택여기에서 별도로 논의.
for삽입, 업데이트및삭제명령, 결과 관계는입니다 변경 사항이있는 테이블 (또는보기!) 효과.
대상 목록은 정의하는 표현 목록입니다. 쿼리의 결과. A의 경우select,이 표현은 그 표현입니다 쿼리의 최종 출력을 구축합니다. 그들은 일치합니다 핵심 단어 사이의 표현에selectandFrom. (*는 단지 약어입니다 관계의 모든 열 이름. 그것은 확장됩니다 개별 열로 구문 분석하여 와이즈 토토 시스템 절대 보지 못해.)
삭제명령은 필요하지 않습니다 결과를 얻지 않기 때문에 대상 목록. ~ 안에 사실, 플래너는 특별한 것을 추가 할 것입니다CTID빈 대상 목록 입력, 그러나 이것은 규칙 시스템 후에 논의 될 것입니다. 나중에; 규칙 시스템의 경우 대상 목록이 비어 있습니다.
for삽입명령, 대상 목록은 들어가야 할 새로운 행을 설명합니다. 결과 관계. 표현으로 구성됩니다 그만큼값조항 또는 에서select조항삽입 ... 선택. 첫 번째 다시 쓰기 프로세스의 단계는 대상 목록 항목을 추가합니다. 원본에 의해 할당되지 않은 열 명령하지만 기본값이 있습니다. 나머지 열 (함께 주어진 값이나 기본값)는 끊임없는 귀무 표현을 가진 플래너.
for업데이트명령, 대상 목록은 교체해야 할 새 행을 설명합니다 오래된 것들. 규칙 시스템에서는 만 포함됩니다 표현set column = 표현명령의 일부. 플래너는 할 것이다 해당 복사 표현을 삽입하여 누락 된 열을 처리합니다 오래된 행에서 새 행으로 값. 그리고 그것은 할 것입니다 스페셜 추가CTID똑같이삭제, 도.
대상 목록의 모든 항목에는 표현식이 포함되어 있습니다 그것은 일정한 값이 될 수 있으며, 가변은 범위 테이블의 관계 중 하나의 열, 매개 변수 또는 기능 호출로 만든 표현식 트리, 상수, 변수, 연산자 등
쿼리의 자격은 매우 표현입니다 대상 목록 항목에 포함 된 것 중 하나. 그만큼 이 표현의 결과 가치는 작동 여부 (삽입, 업데이트, 삭제또는select) 최종 결과 행의 경우 실행 여부. 그것은에 해당합니다.여기서조항SQL진술.
쿼리의 조인 트리는의 구조를 보여줍니다.From절. 간단한 쿼리 좋다선택 ... A, B, C에서, 조인 트리는 단지의 목록 일뿐입니다.From항목, 우리는 가입 할 수 있기 때문입니다 어떤 순서로든. 하지만 언제Join표현, 특히 외부 결합이 사용됩니다 조인에 의해 표시된 순서대로 조인. 이 경우 조인 트리는의 구조를 보여줍니다.Join표현. 제한 특정 관련Join클로즈 (on또는사용Expressions)는 다음과 같이 저장됩니다 교사 트리에 첨부 된 자격 표현 노드. 저장하는 것이 편리한 것으로 판명되었습니다 최상위여기서a 최상위 수준의 조인 트리 항목에 첨부 된 자격, 도. 그래서 실제로 결합 트리는 두 가지를 모두 나타냅니다.Fromand여기서A의 조항select.
쿼리 트리의 다른 부분은주문 by절은 여기에 관심이 없습니다. 와이즈 토토 시스템은 일부 항목을 대체합니다 와이즈 토토을 적용하지만 그와 관련이 없습니다. 와이즈 토토 시스템의 기본 사항.