규칙 시스템이 어떻게 작동하는지 이해하려면 규칙 시스템이 호출되는 시기와 입력 및 결과가 무엇인지 알아야 합니다.
규칙 시스템은 파서와 플래너 사이에 위치합니다. 이는 파서의 출력, 하나의 쿼리 트리 및 사용자 정의 재작성 규칙(일부 추가 정보가 포함된 쿼리 트리이기도 함)을 가져와 결과로 0개 이상의 쿼리 트리를 생성합니다. 따라서 입력과 출력은 항상 파서 자체가 생성할 수 있는 것이므로 보는 모든 것은 기본적으로 다음과 같이 표현할 수 있습니다.SQL성명.
이제 쿼리 롤 토토란 무엇입니까? 이는의 내부 표현입니다.SQL구성된 단일 부분이 별도로 저장되는 명령문입니다. 구성 매개변수를 설정하면 이러한 쿼리 롤 토토가 서버 로그에 표시될 수 있습니다.debug_print_parse, debug_print_rewrite, 또는debug_print_plan. 규칙 작업은 시스템 카탈로그에 쿼리 롤 토토로도 저장됩니다.pg_rewrite. 로그 출력과 같은 형식은 아니지만 정확히 동일한 정보를 포함합니다.
원시 쿼리 롤 토토를 읽으려면 약간의 경험이 필요합니다. 하지만 그 이후로SQL쿼리 롤 토토의 표현은 규칙 시스템을 이해하는 데 충분합니다. 이 장에서는 이를 읽는 방법을 가르치지 않습니다.
읽을 때SQL이 장의 쿼리 트리 표현은 쿼리 트리 구조에 있을 때 명령문이 분할되는 부분을 식별할 수 있어야 합니다. 쿼리 트리의 부분은 다음과 같습니다.
이것은 어떤 명령인지 알려주는 간단한 값입니다(선택, 삽입, 업데이트, 삭제)가 쿼리 롤 토토를 생성했습니다.
범위 테이블은 쿼리에 사용되는 관계의 목록입니다. 에서선택이것은 다음에 주어진 관계임을 진술합니다발신키워드.
모든 범위 테이블 항목은 테이블이나 보기를 식별하고 쿼리의 다른 부분에서 어떤 이름으로 호출되는지 알려줍니다. 쿼리 트리에서 범위 테이블 항목은 이름이 아닌 숫자로 참조되므로 여기에서는 이름이 중복되더라도 문제가 되지 않습니다.SQL문장. 이는 규칙의 범위 테이블이 병합된 후에 발생할 수 있습니다. 이 장의 예에서는 이러한 상황이 발생하지 않습니다.
이것은 쿼리 결과가 이동하는 관계를 식별하는 범위 테이블의 인덱스입니다.
선택쿼리에는 결과 관계가 없습니다. (특별한 경우선택대부분 동일함테이블 생성다음에 이어삽입 ... 선택, 여기서는 별도로 논의하지 않습니다.)
용삽입, 업데이트및삭제명령, 결과 관계는 변경 사항이 적용될 테이블(또는 뷰!)입니다.
대상 목록은 쿼리 결과를 정의하는 표현식 목록입니다. a의 경우선택, 이러한 표현식은 쿼리의 최종 출력을 작성하는 표현식입니다. 키워드 사이의 표현에 해당합니다.선택그리고발신. (*은 관계의 모든 열 이름에 대한 약어입니다. 이는 파서에 의해 개별 열로 확장되므로 규칙 시스템에서는 이를 볼 수 없습니다.)
삭제명령은 결과를 생성하지 않기 때문에 일반 대상 목록이 필요하지 않습니다. 대신 플래너는 특별한 것을 추가합니다.CTID빈 대상 목록에 항목을 입력하여 실행자가 삭제할 행을 찾을 수 있도록 합니다. (CTID14445_14596섹션 41.2.4.)
용삽입명령, 대상 목록은 결과 관계에 들어가야 하는 새 행을 설명합니다. 이는의 표현식으로 구성됩니다.값절 또는 다음의 것선택절삽입 ... 선택. 다시 쓰기 프로세스의 첫 번째 단계에서는 원래 명령으로 할당되지 않았지만 기본값이 있는 열에 대한 대상 목록 항목을 추가합니다. 지정된 값이나 기본값이 없는 나머지 열은 플래너에 의해 상수 null 표현식으로 채워집니다.
용업데이트명령, 대상 목록은 이전 행을 대체해야 하는 새 행을 설명합니다. 규칙 시스템에는의 표현식만 포함됩니다.SET 열 = 표현식명령의 일부입니다. 플래너는 이전 행의 값을 새 행에 복사하는 표현식을 삽입하여 누락된 열을 처리합니다. 마찬가지로삭제, 아CTID또는 실행자가 업데이트할 이전 행을 식별할 수 있도록 전체 행 변수가 추가됩니다.
대상 목록의 모든 항목에는 상수 값, 범위 테이블의 관계 중 하나의 열을 가리키는 변수, 매개변수 또는 함수 호출, 상수, 변수, 연산자 등으로 구성된 표현식 트리가 될 수 있는 표현식이 포함되어 있습니다.
쿼리의 자격은 대상 목록 항목에 포함된 것과 매우 유사한 표현식입니다. 이 표현식의 결과 값은 연산(삽입, 업데이트, 삭제또는선택16619_16697어디an의 절SQL진술.
쿼리의 조인 롤 토토는 다음의 구조를 보여줍니다.발신절. 다음과 같은 간단한 쿼리의 경우a, b, c에서 ... 선택, 조인 롤 토토는 단지발신항목, 왜냐하면 우리는 어떤 순서로든 결합할 수 있기 때문입니다. 하지만 언제가입표현식, 특히 외부 조인이 사용되면 조인에 표시된 순서대로 조인해야 합니다. 이 경우 조인 롤 토토는의 구조를 보여줍니다.가입식. 특정과 관련된 제한 사항가입절 (from켜짐또는사용 중표현식)은 해당 조인 롤 토토 노드에 연결된 한정 표현식으로 저장됩니다. 최상위 레벨을 저장하는 것이 편리한 것으로 나타났습니다.어디에서표현식도 최상위 조인 롤 토토 항목에 첨부된 제한으로 사용됩니다. 따라서 실제로 조인 롤 토토는 다음과 같은 두 가지를 모두 나타냅니다.발신그리고어디a의 절선택.
쿼리 롤 토토의 다른 부분은주문 기준절은 여기서 관심이 없습니다. 규칙 시스템은 규칙을 적용하는 동안 일부 항목을 대체하지만 이는 규칙 시스템의 기본 사항과 큰 관련이 없습니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.