포스트그레강력한 지원규칙 시스템다음 사양에 대한조회그리고 모호함업데이트 보기. 원래는포스트그레규칙 시스템은 두 가지로 구성됨 구현:
첫 번째는 다음을 사용하여 작업했습니다.튜플 수준처리 중이며 깊은 곳에서 구현되었습니다.집행자. 규칙 시스템이 호출되었습니다. 개별 튜플에 액세스할 때마다. 이 구현은 마지막 공식이 1995년에 제거되었습니다. 의 출시포스트그레스프로젝트가 다음으로 변환되었습니다.롤 토토95.
규칙 시스템의 두 번째 구현은 호출된 기술쿼리 재작성.시스템 재작성은 다음과 같은 모듈입니다. 사이에 존재합니다.파서 단계그리고플래너/옵티마이저. 이 기술은 여전히 구현되어 있습니다.
다음의 구문 및 규칙 생성에 대한 정보는포스트그레스시스템 참조롤 토토QL 사용자 가이드.
그쿼리 재작성 시스템은 파서 단계와 플래너/옵티마이저 사이의 모듈입니다. 그것 파서 단계에서 전달된 트리를 처리합니다(이는 사용자 쿼리를 나타냄) 규칙이 존재하는 경우 트리를 다시 작성하는 쿼리에 적용되어야 합니다. 대체 형태.
이제 쿼리 재작성 알고리즘을 스케치하겠습니다. 시스템. 더 나은 설명을 위해 구현 방법을 보여줍니다. 규칙을 예로 들어 봅니다.
다음 규칙이 주어지도록 하십시오:
규칙 생성 view_rule
선택과 마찬가지로
test_view로
대신에 해라
s.sname, p.pname 선택
공급업체 s에서 se, 부품 p를 판매합니다.
여기서 s.sno = se.sno이고
p.pno = se.pno;
주어진 규칙은 다음과 같습니다.해고됨관계에 대해 선택할 때마다test_view감지되었습니다. 선택하는 대신 튜플은test_view선택 에 주어진 진술작업 부분규칙이 실행됩니다.
다음 사용자 쿼리 허용테스트_뷰주어지다:
스네임 선택 test_view에서 여기서 sname < '스미스';
다음은 쿼리 재작성에 의해 수행되는 단계 목록입니다. 사용자 쿼리가 발생할 때마다 시스템test_view나타납니다. (다음 목록은 단지 의도된 알고리즘에 대한 매우 비공식적인 설명 기본적인 이해. 자세한 설명은 다음을 참조하세요.Stonebraker 외, 1989).
test_view다시 작성
다음의 작업 부분에 제공된 쿼리를 가져옵니다. 규칙.
대상 목록을 조정하여 대상 수와 순서를 충족시키십시오. 사용자 쿼리에 제공된 속성입니다.
의 where 절에 제공된 제한을 추가하세요. 주어진 쿼리의 자격에 대한 사용자 쿼리 규칙의 작업 부분에서.
위의 규칙 정의에 따라 사용자 쿼리는 다음과 같습니다. 다음 형식으로 다시 작성됩니다(재작성은 다음과 같습니다. 전달된 사용자 쿼리의 내부 표현에 대해 수행됨 파서 단계로 돌아왔지만 파생된 새로운 데이터 구조 다음 쿼리를 나타냅니다):
s.sname 선택
공급업체 s에서 se, 부품 p를 판매합니다.
여기서 s.sno = se.sno이고
p.pno = se.pno 및
s.sname < '스미스';