이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 39.7. 윈 토토 대 트리거버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

37.6. 롤 토토 대 트리거

트리거를 사용하여 수행 할 수있는 많은 것들도 를 사용하여 구현PostgreSQL롤 토토 시스템. 구현할 수없는 것 중 하나 롤 토토은 일종의 제약, 특히 외국 키입니다. 그것 명령을 다시 작성하는 자격을 갖춘 롤 토토을 배치 할 수 있습니다.아무것도열의 값이하는 경우 다른 테이블에 나타나지 않습니다. 그러나 데이터는 조용히 던져집니다 멀리서 그것은 좋은 생각이 아닙니다. 유효한 값에 대한 검사가있는 경우 필수 및 잘못된 값의 경우 오류 메시지가 필요합니다. 생성해야합니다. 방아쇠에 의해 수행되어야합니다.

이 장에서는 롤 토토을 사용하여보기를 업데이트하는 데 중점을 두었습니다. 이 장의 모든 업데이트 롤 토토 예제도 사용 구현대신트리거 켜기 견해. 그러한 트리거를 작성하는 것은 종종 글쓰기보다 쉽습니다 특히 복잡한 논리가 수행하는 데 필요한 경우 롤 토토 업데이트.

두 가지 모두에서 구현할 수있는 것들. 데이터베이스 사용에 따라 다릅니다. 방아쇠가 한 번 발사됩니다 영향을받는 각 행. 규칙은 쿼리를 수정하거나 an을 생성합니다 추가 쿼리. 따라서 많은 행이 한 명령에 영향을 미치면 하나의 추가 명령을 발행하는 규칙은 모든 행에 호출되는 트리거 및 재정비해야합니다. 여러 번해야 할 일. 그러나 트리거 접근법은 다음과 같습니다 규칙 접근 방식보다 개념적으로 훨씬 간단하며 더 쉽습니다. 초보자가 제대로되기 위해.

여기서 우리는 롤 토토의 선택과 트리거는 한 상황에서 재생됩니다. 두 개의 테이블이 있습니다 :

테이블 컴퓨터 생성 (
    호스트 이름 텍스트 - 색인
    제조업체 텍스트 - 색인
);

테이블 소프트웨어 생성 (
    소프트웨어 텍스트 - 색인
    hostname 텍스트 - 인덱스
);

두 테이블 모두 수천 개의 행이 있고 인덱스는hostname고유합니다. 롤 토토 또는 트리거는 행을 삭제하는 제약 조건을 구현해야합니다.소프트웨어삭제 된 참조 컴퓨터. 방아쇠는이 명령을 사용합니다.

HostName = $ 1; 소프트웨어에서 삭제

삭제 된 각 개별 행마다 트리거가 호출되므로 에서컴퓨터, 준비하고 저장할 수 있습니다 이 명령에 대한 계획과 통과hostname매개 변수의 값. 규칙 다음과 같이 작성됩니다 :

컴퓨터로 삭제에서 Computer_del을 작성하십시오
    HostName = Old.HostName; 인 소프트웨어에서 삭제하십시오.

이제 우리는 다른 유형의 삭제를 살펴 봅니다. 의 경우 에이:

hostName = 'mypc.local.net'; computer에서 삭제

테이블컴퓨터색인 (FAST) 및 트리거가 발행 한 명령도 인덱스 스캔을 사용하십시오 (또한 빠르게). 롤 토토의 추가 명령 :

Computer.HostName = 'mypc.local.net'소프트웨어에서 삭제
                       및 Software.HostName = Computer.HostName;

적절한 인덱스 설정이 있으므로 플래너는 그렇습니다 계획 만들기

NestLoop
  - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔
  - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔

그래서 속도에는 그다지 차이가 ​​없습니다. 트리거 및 롤 토토 구현.

다음 삭제와 함께 우리는 2000 년을 모두 제거하고 싶습니다. 컴퓨터hostname시작 와 함께old. 두 가지가 있습니다 그렇게하는 명령. 하나는 :

hostName = 'old'인 컴퓨터에서 삭제
                       및 hostname < 'olo'

규칙에 의해 추가 된 명령은 다음과 같습니다.

Computer.HostName = 'Old'및 Computer.HostName < 'Ole'소프트웨어에서 삭제
                       및 Software.HostName = Computer.HostName;

계획과 함께

해시 조인
  - 소프트웨어에서 SEQ 스캔
  - 해시
    - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔

다른 가능한 명령은 다음과 같습니다.

HostName ~ '^Old';의 컴퓨터에서 삭제

이 명령에 대한 다음 실행 계획을 초래합니다. 규칙에 따라 추가 :

NestLoop
  - 컴퓨터에서 comp_hostidx를 사용한 색인 스캔
  - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔

이것은 플래너가 자격hostnamein컴퓨터인덱스에도 사용될 수도 있습니다 스캔소프트웨어다수가있을 때 자격 표현이 결합 된and명령의 일반 표현 버전. 방아쇠가 얻을 것입니다 2000 년 구형 컴퓨터 각각에 대해 한 번 호출해야합니다. 삭제하면 한 번의 인덱스 스캔이 발생합니다컴퓨터및 2000 인덱스 스캔이소프트웨어. 롤 토토 구현은이를 수행합니다 인덱스를 사용하는 두 가지 명령. 그리고 그것은 전체 크기에 따라 다릅니다 표의소프트웨어롤 토토 여부 순차적 스캔 상황에서는 여전히 더 빠릅니다. 2000 SPI 관리자의 트리거에서 명령 실행 모든 인덱스 블록이 곧 은닉처.

우리가 보는 마지막 명령은 다음과 같습니다.

제조업체 = 'bim'; 인 컴퓨터에서 삭제

다시 많은 행이 삭제 될 수 있습니다컴퓨터. 그래서 트리거가 다시 실행됩니다 집행자를 통한 많은 명령. 에 의해 생성 된 명령 규칙은 다음과 같습니다 :

Computer.Manufacturer = 'BIM'소프트웨어에서 삭제
                       및 Software.HostName = Computer.HostName;

The plan for that command will again be the nested loop over 두 개의 인덱스 스캔, 다른 인덱스를 사용하여컴퓨터:

NestLoop
  - 컴퓨터에서 comp_manufidx를 사용한 색인 스캔
  - 소프트웨어에서 soft_hostidx를 사용한 색인 스캔

이 경우 롤 토토 시스템의 추가 명령이 있습니다. 영향을받는 행의 수와는 다소 독립적입니다. 명령에서.

요약은 롤 토토이 그들의 행동이 크고 심하게 자격을 갖추게하는 경우 트리거 가입, 플래너가 실패하는 상황.