이 장에서는 토토 결과 시스템에 대해 설명합니다.PostgreSQL. 생산 토토 결과 시스템은 개념적으로는 간단하지만, 미묘한 부분이 많이 있습니다. 실제로 사용하고 있습니다.
일부 다른 데이터베이스 시스템은 활성 데이터베이스 토토 결과을 정의합니다. 이는 일반적으로 저장 프로시저와 트리거입니다. 에서포스트그레SQL, 이는 다음을 사용하여 구현할 수 있습니다. 함수와 트리거도 마찬가지입니다.
토토 결과 시스템(보다 정확하게 말하면 쿼리 재작성) 토토 결과 시스템)은 저장 프로시저와 완전히 다릅니다. 트리거. 토토 결과을 고려하여 쿼리를 수정합니다. 그런 다음 수정된 쿼리를 쿼리 플래너에 전달하여 계획과 실행. 매우 강력하며 다음 용도로 사용할 수 있습니다. 쿼리 언어 프로시저, 뷰, 버전. 이 토토 결과의 이론적 기초와 힘 시스템에 대해서도 설명합니다.데이터베이스의 토토 결과, 절차, 캐싱 및 보기에 대해 시스템그리고통일된 생산 토토 결과을 사용한 버전 모델링을 위한 프레임워크 데이터베이스 시스템.
토토 결과 시스템이 어떻게 작동하는지 이해하려면 다음이 필요합니다. 언제 호출되는지, 입력과 결과가 무엇인지 알 수 있습니다.
토토 결과 시스템은 파서와 파서 사이에 위치합니다. 기획자. 파서의 출력, 하나의 쿼리 트리 및 사용자 정의 재작성 토토 결과은 쿼리 트리이기도 합니다. 몇 가지 추가 정보를 제공하고 0개 이상의 쿼리 트리를 생성합니다. 결과. 따라서 입력과 출력은 항상 파서의 것입니다. 그 자체로 생산할 수 있으므로 그것이 보는 모든 것은 기본적으로 다음과 같이 표현할 수 있습니다.SQL성명.
이제 쿼리 트리는 무엇입니까? 내부 표현입니다 의SQL문장 그것이 만들어지는 단일 부품은 별도로 저장됩니다. 이러한 쿼리 트리는 다음을 설정하면 서버 로그에 표시될 수 있습니다. 구성 매개변수debug_print_parse, debug_print_rewrite또는debug_print_plan. 토토 결과 작업은 다음과 같습니다. 시스템 카탈로그에 쿼리 트리로 저장됨pg_rewrite. 다음과 같은 형식이 아닙니다. 로그 출력이지만 정확히 동일한 정보가 포함되어 있습니다.
원시 쿼리 트리를 읽으려면 약간의 경험이 필요합니다. 하지만 그 이후로SQL쿼리 표현 트리는 토토 결과 시스템을 이해하기에 충분합니다. 이 장에서는 읽는 방법을 가르치지 않습니다.
읽을 때SQL이 장의 쿼리 트리 표현은 다음과 같습니다. 진술서의 일부를 식별할 수 있어야 합니다. 쿼리 트리 구조에 있을 때 분할됩니다. 부품 쿼리 트리는 다음과 같습니다.
이것은 어떤 명령인지 알려주는 간단한 값입니다. (선택, 삽입, 업데이트, 삭제)이 쿼리를 생성했습니다. 나무.
범위 테이블은 사용되는 관계의 목록입니다 쿼리에서. 에서선택이것은 다음에 주어진 관계임을 진술합니다발신키워드.
모든 범위 테이블 항목은 테이블이나 보기를 식별하고 다른 부분에서는 어떤 이름으로 불리는지 알려줍니다. 쿼리. 쿼리 트리에서 범위 테이블 항목은 다음과 같습니다. 이름이 아닌 번호로 참조되므로 여기에 중복된 이름이 있어도 상관없습니다. 에서SQL성명. 이는 토토 결과의 범위 테이블이 변경된 후에 발생할 수 있습니다. 병합되었습니다. 이 장의 예제에는 이 상황.
이것은 다음을 식별하는 범위 테이블의 색인입니다. 쿼리 결과가 이동하는 관계입니다.
선택질의는 일반적으로 그렇지 않습니다 결과 관계를 가지고 있습니다. a의 특별한 경우선택대부분 a와 동일합니다.테이블 생성다음에 a삽입 ... 선택그리고 그렇지 않습니다 여기서 별도로 논의됩니다.
용삽입, 업데이트및삭제명령, 결과 관계는 다음과 같습니다. 변경 사항이 적용되는 테이블(또는 뷰!)입니다.
대상 목록은 다음을 정의하는 표현식 목록입니다. 쿼리 결과. a의 경우선택, 이 표현들은 쿼리의 최종 출력을 작성합니다. 그들은 대응한다 키워드 사이의 표현선택그리고발신. (*는 단지 다음의 약어일 뿐입니다. 관계의 모든 열 이름. 에 의해 확장됩니다. 개별 열로 파싱하므로 토토 결과 시스템 본 적이 없습니다.)
삭제명령에는 결과가 생성되지 않기 때문에 대상 목록입니다. 에서 사실 플래너가 특별 메뉴를 추가할 예정입니다.CTID빈 대상 목록 항목, 그러나 이는 토토 결과 시스템 이후의 것이므로 논의될 것입니다. 나중에; 토토 결과 시스템의 경우 대상 목록이 비어 있습니다.
용삽입명령, 대상 목록은 대상 목록에 들어가야 하는 새 행을 설명합니다. 결과관계. 의 표현으로 구성되어 있습니다.값절 또는 그 것 에서선택절삽입 ... 선택. 첫 번째 다시 쓰기 프로세스의 단계에서는 다음에 대한 대상 목록 항목을 추가합니다. 원본에 의해 할당되지 않은 모든 열 명령이지만 기본값이 있습니다. 나머지 열( 주어진 값이나 기본값 모두)는 다음에 의해 채워집니다. 상수 null 표현식을 사용하는 플래너입니다.
용업데이트명령, 대상 목록은 대체해야 하는 새 행을 설명합니다. 오래된 것. 토토 결과 시스템에서는 의 표현SET 열 = 표현명령의 일부입니다. 기획자는 복사하는 표현식을 삽입하여 누락된 열을 처리합니다. 이전 행의 값을 새 행으로 가져옵니다. 그리고 그럴 것이다 특별 추가CTID다음과 같은 항목삭제, 너무.
대상 목록의 모든 항목에는 표현식이 포함되어 있습니다 이는 상수 값, 즉 다음을 가리키는 변수일 수 있습니다. 범위 테이블의 관계 중 하나의 열, 매개변수 또는 함수 호출로 구성된 표현식 트리 상수, 변수, 연산자 등
쿼리의 자격은 다음과 매우 유사한 표현식입니다. 대상 목록 항목에 포함된 항목 중 하나입니다. 는 이 표현식의 결과 값은 다음을 나타내는 부울입니다. 작업 여부 (삽입, 업데이트, 삭제, 또는선택) 최종 결과 행은 다음과 같아야 합니다. 실행 여부. 에 해당합니다.어디an의 절SQL성명.
쿼리의 조인 트리는 다음의 구조를 보여줍니다.발신절. 간단한 쿼리의 경우 좋아요a, b, c에서 ... 선택, 조인 트리는 단지발신항목, 가입이 허용되었기 때문입니다. 어떤 순서로든. 하지만 언제가입표현식, 특히 외부 조인이 사용됩니다. 조인에 표시된 순서대로 조인합니다. 그 경우, 조인 트리는의 구조를 보여줍니다.가입식. 제한 사항 특정과 연관됨가입절 (fromON또는사용 중표현식)은 다음과 같이 저장됩니다. 해당 조인 트리에 첨부된 자격 표현식 노드. 보관하기 편리할 것 같습니다 최상위어디표현식 최상위 조인 트리 항목에 첨부된 자격, 너무. 따라서 실제로 조인 트리는 다음과 같은 두 가지를 모두 나타냅니다.발신그리고어디a의 절선택.
쿼리 트리의 다른 부분은주문 기준절은 여기서 관심이 없습니다. 토토 결과 시스템은 일부 항목을 대체합니다. 토토 결과을 적용하지만 이는 문제와 별로 관련이 없습니다. 토토 결과 시스템의 기본입니다.