이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 캔 : 문서 : 17 : 39 장버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

17장.포스트그레범퍼카 토토 시스템

저자:Jan Wieck 작성. 7.1 업데이트 톰 레인.

생산 범퍼카 토토 시스템은 개념적으로 간단하지만 다음이 있습니다. 실제로 사용하는 데에는 많은 미묘한 점이 있습니다. 이들 중 일부 요점과 이론적 기초포스트그레스범퍼카 토토 시스템은 다음에서 찾을 수 있습니다. [Stonebraker 외, ACM, 1990].

일부 다른 데이터베이스 시스템은 활성 데이터베이스 규칙을 정의합니다. 이는 일반적으로 저장 프로시저와 트리거이며 다음과 같습니다. 에서 구현됨포스트그레스으로 함수 및 트리거.

쿼리 재작성 범퍼카 토토 시스템(이제부터 "범퍼카 토토 시스템") 저장 프로시저 및 트리거와는 완전히 다릅니다. 그것 규칙을 고려하여 쿼리를 수정한 다음 계획을 위해 수정된 쿼리를 쿼리 플래너에 전달하고 실행. 매우 강력하며 다양한 용도로 사용할 수 있습니다. 쿼리 언어 프로시저, 뷰, 버전 등이 있습니다. 힘 이 범퍼카 토토 시스템의 내용은 [에서 논의됩니다.옹과 고, 1990] 및 [Stonebraker 외, ACM, 1990].

17.1. 무엇 쿼리트리인가요?

범퍼카 토토 시스템이 어떻게 작동하는지 이해하려면 다음이 필요합니다. 언제 호출되는지, 입력과 결과가 무엇인지 알 수 있습니다.

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

이제 쿼리 트리가 무엇입니까? 내부 표현입니다 anSQL단일 그것을 만든 부품은 별도로 저장됩니다. 이러한 쿼리 트리는 시작할 때 표시됨포스트그레스디버그 레벨 4의 백엔드 및 대화형 백엔드 인터페이스에 쿼리를 입력합니다. 범퍼카 토토 의 작업pg_rewrite시스템 카탈로그는 쿼리 트리로도 저장됩니다. 포맷되지 않았습니다 디버그 출력과 비슷하지만 정확히 동일한 내용을 포함합니다. 정보.

쿼리 트리를 읽으려면 약간의 경험이 필요하며 이는 범퍼카 토토 시스템 작업을 시작했을 때 힘든 시간을 보냈습니다. 나는 할 수 있다 내가 커피 머신 앞에 서서 봤던 걸 기억해 타겟리스트에는 컵, 물과 커피가루는 rangetable 및 한정 표현식의 모든 버튼. 부터SQL표현 쿼리트리는 범퍼카 토토 시스템을 이해하기에 충분합니다. 문서는 읽는 방법을 가르쳐주지 않습니다. 도움이 될 수도 있습니다 그것을 배우고 나중에 명명 규칙이 필요합니다 다음 설명을 참조하세요.

17.1.1. 쿼리트리의 부분

읽을 때SQL이 문서에 있는 쿼리 트리의 표현은 다음과 같습니다. 진술서의 일부를 식별할 수 있어야 합니다. 쿼리 트리 구조에 있을 때 분할됩니다. 부품 쿼리 트리는 다음과 같습니다.

명령 유형

이것은 어떤 명령인지 알려주는 간단한 값입니다. (SELECT, INSERT, UPDATE, DELETE)가 생성되었습니다. 구문 분석 트리.

범위 테이블

범위 테이블은 사용되는 관계의 목록입니다. 쿼리에서. SELECT 문에서는 다음과 같습니다. FROM 키워드 뒤에 주어진 관계.

모든 범위 테이블 항목은 테이블 또는 보기를 식별합니다. 다른 부분에서는 어떤 이름으로 불리는지 알려줍니다. 쿼리의. 쿼리 트리에서 범위 테이블 항목 이름이 아닌 색인으로 참조되므로 여기서는 중복된 이름이 있어도 상관없습니다. 에서SQL성명. 이것 규칙의 범위 테이블이 변경된 후에 발생할 수 있습니다. 병합되었습니다. 이 문서의 예제에는 이 상황.

결과관계

이것은 다음을 식별하는 범위 테이블에 대한 색인입니다. 쿼리 결과가 이동하는 관계입니다.

SELECT 쿼리에는 일반적으로 결과가 없습니다. 관계. SELECT INTO의 특별한 경우는 대부분 다음과 같습니다. CREATE TABLE, INSERT ... SELECT 시퀀스와 동일 여기서는 별도로 논의하지 않습니다.

INSERT, UPDATE 및 DELETE 쿼리에서 resultrelation은 테이블(또는 뷰!)입니다. 변경사항이 적용됩니다.

대상 목록

대상 목록은 다음을 정의하는 표현식 목록입니다. 쿼리 결과. SELECT의 경우, 표현식은 최종 출력을 구성하는 것입니다. 질문. SELECT와 SELECT 사이의 표현식입니다. FROM 키워드. (*는 all의 약자일 뿐입니다. 관계의 속성 이름. 다음과 같이 확장됩니다. 파서는 개별 속성으로 분류되므로 규칙은 시스템에서는 이를 볼 수 없습니다.)

DELETE 쿼리는 대상 목록이 필요하지 않습니다. 아무런 결과도 내지 마세요. 실제로 기획자가 추가할 예정입니다. 빈 대상 목록에 대한 특수 CTID 항목입니다. 하지만 이 는 범퍼카 토토 시스템 이후이며 나중에 논의됩니다. 범퍼카 토토 시스템의 경우 대상 목록이 비어 있습니다.

INSERT 쿼리에서 대상 목록은 새로운 내용을 설명합니다. 결과 관계에 들어가야 하는 행입니다. 그것은 VALUES 절의 표현식 또는 INSERT ... SELECT의 SELECT 절. 누락된 열 결과 관계는 플래너에 의해 채워질 것입니다 상수 NULL 표현식을 사용합니다.

업데이트 쿼리에서 대상 목록은 새 항목을 설명합니다. 이전 행을 대체해야 하는 행입니다. 규칙에서는 시스템에는 SET의 표현식만 포함됩니다. 속성 = 쿼리의 표현식 부분입니다. 기획자 다음과 같은 표현식을 삽입하여 누락된 열을 추가합니다. 이전 행의 값을 새 행에 복사합니다. 그리고 DELETE와 마찬가지로 특수 CTID 항목을 추가합니다. 도.

대상 목록의 모든 항목에는 표현식이 포함되어 있습니다 이는 상수 값, 변수를 가리키는 변수일 수 있습니다. 범위 테이블에 있는 관계 중 하나의 속성 매개변수 또는 함수로 구성된 표현식 트리 호출, 상수, 변수, 연산자 등

자격

쿼리의 자격은 다음과 매우 유사한 표현식입니다. targetlist 항목에 포함된 항목 중 하나입니다. 그만큼 이 표현식의 결과 값은 다음을 나타내는 부울입니다. 다음에 대한 작업(INSERT, UPDATE, DELETE 또는 SELECT)이 최종 결과 행을 실행해야 하는지 여부입니다. 그것은 an의 WHERE 절SQL성명.

조인 트리

쿼리의 조인 트리는 다음의 구조를 보여줍니다. FROM 절. SELECT FROM a, b와 같은 간단한 쿼리의 경우 c 조인 트리는 단지 FROM 항목의 목록일 뿐입니다. 왜냐하면 우리는 어떤 순서로든 합류할 수 있기 때문입니다. 하지만 JOIN 표현식 --- 특히 외부 조인 --- 사용되므로 표시된 순서대로 참여해야 합니다. 조인. 조인 트리는 JOIN의 구조를 보여줍니다. 표현. 관련된 제한사항 특정 JOIN 절(ON 또는 USING 표현식에서) 다음에 첨부된 자격 표현식으로 저장됩니다. 그것들은 트리 노드에 합류합니다. 편리한 것으로 밝혀졌습니다. 최상위 WHERE 표현식을 한정으로 저장 최상위 조인 트리 항목에도 첨부됩니다. 그래서 실제로 조인 트리는 FROM과 WHERE를 모두 나타냅니다. SELECT 절.

기타

ORDER BY와 같은 쿼리 트리의 다른 부분 절은 여기서 관심이 없습니다. 범퍼카 토토 시스템 규칙을 적용하는 동안 해당 항목을 대체하지만 그건 펀더멘털이랑 별로 관련이 없어 범퍼카 토토 시스템.