생산 토토 꽁 머니 시스템은 개념적으로 간단하지만 실제로 사용하는 데에는 많은 미묘한 점이 있습니다. 이들 중 일부 요점과 이론적 기초포스트그레토토 꽁 머니 시스템은 다음에서 찾을 수 있습니다. [Stonebraker 외, ACM, 1990].
일부 다른 데이터베이스 시스템은 활성 데이터베이스 규칙을 정의합니다. 이것들 일반적으로 저장 프로시저 및 트리거이며 다음에서 구현됩니다.포스트그레함수로 트리거합니다.
쿼리 재작성 토토 꽁 머니 시스템(이제부터 "토토 꽁 머니 시스템")은 저장 프로시저 및 트리거와는 완전히 다릅니다. 수정합니다 규칙을 고려한 다음 쿼리를 전달합니다. 실행을 위해 쿼리 최적화 프로그램에 쿼리를 수정했습니다. 그것은 매우 강력하며 쿼리 언어와 같은 다양한 용도로 사용될 수 있습니다. 프로시저, 보기 및 버전. 이 토토 꽁 머니 시스템의 힘은 [에서 논의됨옹과 고, 1990] 및 [Stonebraker 외, ACM, 1990].
토토 꽁 머니 시스템이 어떻게 작동하는지 이해하려면 다음 사항을 알아야 합니다. 호출되는 시기와 입력 및 결과는 무엇입니까?
토토 꽁 머니 시스템은 쿼리 파서와 최적화 프로그램. 파서의 출력, 하나의 쿼리 트리 및 재작성 규칙은pg_rewrite카탈로그는 추가 정보도 포함된 쿼리 트리입니다. 결과적으로 0개 또는 여러 개의 쿼리 트리를 생성합니다. 그러니까 입출력이 되는 거죠 항상 파서 자체가 생성할 수 있는 것이므로 그것이 보는 모든 것은 기본적으로 다음과 같이 표현 가능합니다.SQL진술.
이제 쿼리 트리가 무엇입니까? 이는의 내부 표현입니다.SQL단일 부분이 있는 진술 그것을 만든 것은 별도로 저장됩니다. 이 쿼리 트리는 표시됩니다 시작할 때포스트그레백엔드 debuglevel 4를 사용하고 대화형 백엔드에 쿼리를 입력합니다. 인터페이스. 의 토토 꽁 머니 작업pg_rewrite시스템 카탈로그도 다음과 같이 저장됩니다. 쿼리 트리. 디버그 출력과 같은 형식은 아니지만 정확히 동일한 정보를 포함하고 있습니다.
쿼리 트리를 읽으려면 약간의 경험이 필요하며 어려웠습니다. 토토 꽁 머니 시스템 작업을 시작한 때입니다. 나는 그것을 기억할 수 있다 나는 커피머신 앞에 서 있었는데, 그 컵이 담긴 것을 보았다. 목표 목록, 물, 커피 가루를 레인지 테이블에 넣고 모든 한정 표현식의 버튼. 이후SQL쿼리 트리 표현으로 충분합니다. 토토 꽁 머니 시스템을 이해하기 위해 이 문서에서는 토토 꽁 머니 시스템을 이해하는 방법을 가르치지 않습니다. 읽어보세요. 그것을 배우는 것이 도움이 될 수 있으며 명명 규칙은 다음과 같습니다. 이후 설명에서 필요합니다.
읽을 때SQL이 문서의 쿼리 트리 표현이 필요합니다. 명령문이 분할되는 부분을 식별할 수 있는 경우 쿼리트리 구조에 있습니다. 쿼리 트리의 부분은 다음과 같습니다.
이것은 어떤 명령(SELECT, INSERT, UPDATE, DELETE)가 구문 분석 트리를 생성했습니다.
Rangtable은 다음에서 사용되는 관계의 목록입니다. 쿼리. 다음에 주어진 관계인 SELECT 문에서 FROM 키워드입니다.
모든 범위 테이블 항목은 테이블이나 보기를 식별하고 이를 알려줍니다. 쿼리의 다른 부분에서는 어떤 이름으로 호출되는지입니다. 에서 쿼리 트리 범위 테이블 항목은 인덱스로 참조됩니다. 이름이 아닌 이름이므로 여기에 있는지 여부는 중요하지 않습니다. 에서와 같이 이름이 중복됩니다.SQL문장. 이는 다음 이후에도 발생할 수 있습니다. 규칙의 범위 테이블이 병합되었습니다. 이 예제는 문서에는 이런 상황이 없습니다.
이것은 다음을 식별하는 범위 테이블의 색인입니다. 쿼리 결과가 어디로 가는 관계입니다.
SELECT 쿼리에는 일반적으로 결과 관계가 없습니다. 는 SELECT INTO의 특수한 경우는 대부분 CREATE와 동일합니다. TABLE, INSERT ... SELECT 시퀀스는 논의되지 않습니다. 여기서는 별도로.
INSERT, UPDATE 및 DELETE 쿼리에서 결과 관계는 다음과 같습니다. 변경 사항이 적용되는 테이블(또는 뷰!)입니다.
대상 목록은 다음을 정의하는 표현식 목록입니다. 쿼리 결과입니다. SELECT의 경우 표현식은 다음과 같습니다. 쿼리의 최종 출력을 작성하는 것입니다. 그들은 SELECT와 FROM 키워드 사이의 표현식(*는 단지 관계의 모든 속성 이름에 대한 약어).
DELETE 쿼리는 대상 목록이 필요하지 않습니다. 어떤 결과라도 만들어내세요. 실제로 옵티마이저는 특별한 기능을 추가할 것입니다. 빈 대상 목록에 항목을 입력합니다. 하지만 이건 규칙 이후의 일이야 시스템이며 나중에 논의하겠습니다. 토토 꽁 머니 시스템의 경우 대상 목록이 비어 있습니다.
INSERT 쿼리에서 대상 목록은 다음과 같은 새로운 행을 설명합니다. 결과 관계로 들어가야 합니다. 누락된 열 resultrelation은 최적화 프로그램에 의해 상수로 추가됩니다. NULL 표현식. VALUES 절의 표현식이거나 INSERT ... SELECT의 SELECT 절에 있는 항목입니다.
업데이트 쿼리에서 업데이트해야 하는 새 행을 설명합니다. 오래된 것을 교체하십시오. 이제 최적화 프로그램이 누락된 항목을 추가합니다. 열의 값을 입력하는 표현식을 삽입하여 열 이전 행을 새 행으로 변환합니다. 그리고 특별 항목이 추가됩니다. DELETE도 마찬가지입니다. SET의 표현입니다 속성 = 쿼리의 표현식 부분입니다.
대상 목록의 모든 항목에는 다음과 같은 표현식이 포함되어 있습니다. 상수 값, 속성을 가리키는 변수일 수 있습니다. 범위 테이블의 관계 중 하나, 매개변수 또는 함수 호출, 상수, 변수로 구성된 표현식 트리 연산자 등
쿼리 한정은 다음 중 하나와 매우 유사한 표현식입니다. targetlist 항목에 포함된 항목입니다. 결과 값 이 표현식은 작업이 실행되는지 여부를 알려주는 부울입니다. (INSERT, UPDATE, DELETE 또는 SELECT) 최종 결과 행 실행해야 하나 말아야 하나. 이는의 WHERE 절입니다.SQL성명.
ORDER BY 절과 같은 쿼리 트리의 다른 부분 여기에는 관심이 없습니다. 토토 꽁 머니 시스템이 항목을 대체합니다. 규칙을 적용하는 동안에는 할 일이 별로 없습니다. 토토 꽁 머니 시스템의 기본을 다룹니다. GROUP BY는 특별합니다. 뷰 정의에 나타나고 여전히 필요한 경우 문서화되어야 합니다.