트리거를 사용하여 수행할 수 있는 많은 작업은 다음을 사용하여 구현되었습니다.PostgreSQL롤 토토 시스템. 구현하기 어려운 것 중 하나 롤 토토은 일종의 제약 조건, 특히 외래 키입니다. 그것 명령을 다시 작성하는 정규화된 롤 토토을 배치하는 것이 가능합니다.111PostgreSQL: 문서: 9.1: 규칙 대 트리거52열의 값이 다음과 같은 경우 다른 테이블에는 나타나지 않습니다. 하지만 그러면 데이터가 자동으로 던져집니다. 멀리 있는 것은 좋은 생각이 아닙니다. 유효한 값을 확인하는 경우 필수이며 잘못된 값의 경우 오류 메시지가 표시됩니다. 생성되어야 하며 트리거에 의해 수행되어야 합니다.
이 장에서는 규칙을 사용하여 보기를 업데이트하는 방법에 중점을 두었습니다. 이 장의 모든 업데이트 규칙 예는 다음과 같습니다. 를 사용하여 구현됨대신트리거 켜짐 견해. 그러한 트리거를 작성하는 것이 작성하는 것보다 쉬운 경우가 많습니다. 특히 롤 토토을 수행하는 데 복잡한 논리가 필요한 경우 업데이트합니다.
두 가지 모두에 의해 구현될 수 있는 것 중 가장 좋은 것은 데이터베이스 사용량에 따라 다릅니다. 트리거는 한 번만 실행됩니다. 영향을 받는 각 행. 규칙은 쿼리를 수정하거나 추가 쿼리. 따라서 하나의 명령문에서 많은 행이 영향을 받는 경우 하나의 추가 명령을 내리는 규칙은 모든 단일 행에 대해 호출되고 다시 결정되어야 하는 트리거 여러번 해야 할 일. 그러나 트리거 접근 방식은 다음과 같습니다. 개념적으로 규칙 접근 방식보다 훨씬 간단하고 더 쉽습니다. 초보자가 올바르게 이해할 수 있도록.
여기서 우리는 롤 토토 선택과 롤 토토 선택이 어떻게 다른지에 대한 예를 보여줍니다. 트리거는 한 상황에서 실행됩니다. 두 개의 테이블이 있습니다:
테이블 컴퓨터 생성(
    호스트 이름 텍스트, -- 색인화됨
    제조업체 텍스트 - 색인화됨
);
CREATE TABLE 소프트웨어(
    소프트웨어 텍스트, -- 색인화됨
    호스트 이름 텍스트 - 색인화됨
);
  두 테이블 모두 수천 개의 행과 인덱스를 가지고 있습니다.호스트 이름고유합니다. 롤 토토이나 트리거는 행을 삭제하는 제약 조건을 구현해야 합니다.소프트웨어12945_13020
호스트 이름 = $1인 소프트웨어에서 삭제;
트리거는 삭제된 각 개별 행에 대해 호출되므로 에서컴퓨터, 준비하고 저장할 수 있습니다. 이 명령에 대한 계획을 작성하고를 전달합니다.호스트 이름매개변수의 값입니다. 규칙 다음과 같이 작성됩니다:
컴퓨터 삭제 시 규칙computer_del 생성
    호스트 이름 = OLD.hostname인 소프트웨어에서 삭제하세요.
  이제 다양한 유형의 삭제를 살펴보겠습니다. 의 경우 에:
호스트 이름 = 'mypc.local.net'인 컴퓨터에서 삭제;
테이블컴퓨터스캔 대상: 인덱스(빠름) 및 트리거에 의해 실행된 명령도 인덱스 스캔을 사용하십시오(또한 빠릅니다). 규칙의 추가 명령 다음과 같습니다:
computer.hostname = 'mypc.local.net'인 소프트웨어에서 삭제
                       AND 소프트웨어.호스트 이름 = 컴퓨터.호스트 이름;
  적절한 인덱스 설정이 있으므로 플래너는 계획을 세우다
네스트루프 - 컴퓨터에서 comp_hostidx를 사용하여 인덱스 스캔 - 소프트웨어에서 Soft_hostidx를 사용한 인덱스 스캔
그래서 두 제품 사이의 속도에는 그다지 큰 차이가 없을 것입니다. 트리거 및 롤 토토 구현.
다음 삭제에서는 2000개 항목을 모두 제거하고 싶습니다. 컴퓨터는호스트 이름시작 와 함께오래된. 두 가지가 가능합니다 그렇게 하라고 명령합니다. 하나는 다음과 같습니다:
호스트 이름 = '이전'인 컴퓨터에서 삭제
                       AND 호스트 이름 < 'ole'
  규칙에 의해 추가된 명령은 다음과 같습니다:
컴퓨터.호스트 이름 = '이전' AND 컴퓨터.호스트 이름 < 'ole'인 소프트웨어에서 삭제
                       AND 소프트웨어.호스트 이름 = 컴퓨터.호스트 이름;
  계획과 함께
해시 조인
  - 소프트웨어의 서열 스캔
  - 해시
    - 컴퓨터에서 comp_hostidx를 사용하여 인덱스 스캔
  다른 가능한 명령은 다음과 같습니다:
호스트 이름 ~ '^old'가 있는 컴퓨터에서 삭제;
다음 명령에 대한 실행 계획이 생성됩니다. 규칙에 의해 추가되었습니다:
네스트루프 - 컴퓨터에서 comp_hostidx를 사용하여 인덱스 스캔 - 소프트웨어에서 Soft_hostidx를 사용한 인덱스 스캔
이것은 기획자가 다음을 인식하지 못한다는 것을 보여줍니다. 자격호스트 이름in컴퓨터색인에도 사용할 수 있습니다. 계속 스캔하세요소프트웨어여러 개가 있는 경우 와 결합된 한정식그리고, 이는 명령의 정규식 버전입니다. 방아쇠는 얻을 것입니다 2000대의 오래된 컴퓨터 각각에 대해 한 번씩 호출됩니다. 삭제되면 한 번의 인덱스 스캔이 발생합니다.컴퓨터및 2000개의 색인 스캔 이상소프트웨어. 규칙 구현은 다음과 같이 수행됩니다. 인덱스를 사용하는 두 가지 명령. 그리고 전체 크기에 따라 다릅니다. 테이블의소프트웨어규칙 여부 순차 스캔 상황에서는 여전히 더 빠릅니다. 2000 SPI 관리자를 통한 트리거의 명령 실행은 다음과 같습니다. 모든 인덱스 블록이 곧 캐시.
우리가 보는 마지막 명령은 다음과 같습니다:
제조업체 = 'bim'인 컴퓨터에서 삭제;
또한 이로 인해 많은 행이 삭제될 수 있습니다.컴퓨터. 그러면 트리거가 다시 실행됩니다. 실행자를 통한 많은 명령. 에 의해 생성된 명령 규칙은 다음과 같습니다:
computer.manufacturer = 'bim'인 소프트웨어에서 삭제
                       AND 소프트웨어.호스트 이름 = 컴퓨터.호스트 이름;
  해당 명령에 대한 계획은 다시 중첩 루프가 될 것입니다 두 개의 인덱스 스캔, 다른 인덱스만 사용컴퓨터:
네스트루프 - 컴퓨터에서 comp_manufidx를 사용하여 인덱스 스캔 - 소프트웨어에서 Soft_hostidx를 사용한 인덱스 스캔
이러한 경우에는 롤 토토 시스템의 추가 명령이 영향을 받는 행 수와 다소 독립적입니다. 명령으로.
요약하자면, 규칙은 다음보다 상당히 느려질 것입니다. 그들의 행동으로 인해 규모가 크고 자격이 부족한 경우 트리거됩니다. 조인, 플래너가 실패하는 상황.