롤 토토는 특정 유형의 작업이 수행 될 때마다 데이터베이스가 특정 기능을 자동으로 실행 해야하는 사양입니다. 롤 토토는 테이블 (파티션 여부),보기 및 외국 테이블에 부착 할 수 있습니다.
테이블 및 외국 테이블에서 롤 토토는 전후에 실행하도록 정의 할 수 있습니다삽입
, 업데이트
또는삭제
작동, 수정 된 행당 한 번 또는 당시 한 번SQL진술.업데이트
롤 토토는 특정 열에 언급 된 경우에만 해고 될 수 있습니다set
절의 조항업데이트
진술. 롤 토토는 또한 발사 할 수 있습니다Truncate
진술. 롤 토토 이벤트가 발생하면 트리거의 기능은 이벤트를 처리하기에 적절한 시간에 호출됩니다.
보기에서 롤 토토는 대신 실행하도록 정의 할 수 있습니다삽입
, 업데이트
또는삭제
운영. 그런대신
뷰에서 수정 해야하는 각 행에 대해 롤 토토가 한 번 시작됩니다. View의 기본 기본 테이블에 필요한 수정을 수행하는 것은 롤 토토 기능의 책임이며, 적절한 경우 수정 된 행을 뷰에 표시 할 때 반환합니다. 시야 롤 토토는 또한 한 번을 한 번 실행하도록 정의 할 수 있습니다.SQL명령문, 전후삽입
, 업데이트
또는삭제
운영. 그러나 그러한 롤 토토는도있는 경우에만 해고됩니다.대신
보기에서 롤 토토. 그렇지 않으면,보기를 타겟팅하는 모든 진술은 기본베이스 테이블에 영향을 미치는 진술로 다시 작성해야하며, 해고 될 롤 토토는베이스 테이블에 첨부 된 롤 토토입니다..
롤 토토 기능은 롤 토토 자체를 생성하기 전에 정의되어야합니다. 롤 토토 함수는 인수를 취하지 않고 반환 유형을 취하는 함수로 선언해야합니다롤 토토
. (롤 토토 함수는 특수 통과를 통해 입력을 수신합니다TriggerData
일반적인 기능 인수의 형태가 아닌 구조.)
적절한 롤 토토 함수가 만들어지면 롤 토토가 설정됩니다.롤 토토 만들기. 동일한 롤 토토 기능을 여러 롤 토토에 사용할 수 있습니다.
PostgreSQL둘 다 제공per-row롤 토토 및당사자 당롤 토토. 당 방향 롤 토토를 사용하면 롤 토토 기능이 롤 토토를 발사 한 명령문의 영향을받는 각 행에 대해 한 번 호출됩니다. 대조적으로, 해당 명령문의 영향을받는 행의 수에 관계없이 적절한 명령문이 실행될 때 마당 마당 롤 토토가 한 번만 호출됩니다. 특히, 제로 행에 영향을 미치는 진술은 여전히 적용 가능한 진술 당 롤 토토를 실행하게됩니다. 이 두 가지 유형의 롤 토토는 때때로라고합니다.로우 레벨롤 토토 및명령문 수준롤 토토. 롤 토토Truncate
row가 아닌 명세서 레벨에서만 정의 될 수 있습니다.
롤 토토는 또한 화재 여부에 따라 분류됩니다전, 이후또는대신작업. 이것들은라고합니다.전
롤 토토,이후
롤 토토,대신
롤 토토. 진술 수준전
진술이 무엇이든하기 시작하기 전에 자연스럽게 발사되는 반면, 진술 수준이후
성명서의 끝에서 발사를 롤 토토합니다. 이러한 유형의 롤 토토는 테이블, 뷰 또는 외국 테이블에 정의 될 수 있습니다. 줄 수준전
특정 행이 작동하기 직전에 발사를 롤 토토하는 반면,로드 레벨이후
진술이 끝날 때 발사를 롤 토토합니다 (그러나 진술 수준 이전이후
롤 토토). 이러한 유형의 롤 토토는 테이블과 외국 테이블에만 정의 될 수 있습니다.대신
롤 토토는 뷰에서만 줄 수준에서만 정의 될 수 있습니다. 보기의 각 행이 작동 해야하는 것으로 식별되면 즉시 발사합니다.
AN의 실행이후
롤 토토는 명세서의 끝이 아닌 거래 종료로 연기 될 수 있습니다.제약 롤 토토. 모든 경우에 롤 토토는 롤 토토와 동일한 트랜잭션의 일부로 실행되므로 진술이나 롤 토토가 오류를 일으키면 두 가지의 효과가 롤백됩니다..
IF an삽입
포함충돌에서 업데이트
절, 행 수준에 가능전
삽입
and전
업데이트
롤 토토링 행에서 실행되는 롤 토토. 이러한 상호 작용은 롤 토토가 Idempotent가 아닌 경우 복잡 할 수 있습니다.전
삽입
롤 토토는전
업데이트
변경 사항을 포함한 롤 토토제외
열.
진술 수준에 유의업데이트
롤 토토가 실행될 때충돌에서 업데이트
행이의 영향을 받는지 여부에 관계없이 지정됩니다업데이트
(그리고 대안에 관계없이업데이트
경로가 촬영되었습니다).삽입
with충돌에 대한 업데이트
조항은 명령문 수준을 실행합니다전
삽입
먼저 롤 토토, 그 다음 명령문 수준전
업데이트
롤 토토, 그 다음에는 진술 수준이후
업데이트
롤 토토 및 마침내 진술 수준이후
삽입
롤 토토.
상속 또는 분할 계층 구조에서 부모 테이블을 대상으로하는 진술은 영향을받는 자식 테이블의 명령문 수준 롤 토토를 해고하지 않습니다. 부모 테이블의 명세서 수준 롤 토토 만 해고됩니다. 그러나 영향을받는 어린이 테이블의 행 수준 롤 토토가 해고됩니다.
IF an업데이트
분할 된 테이블에서 행이 다른 파티션으로 이동하게됩니다.삭제
원래 파티션에서에서삽입
새 파티션으로. 이 경우 모든 줄 수준전
업데이트
롤 토토 및 모든 줄 수준전
삭제
원래 파티션에서 롤 토토가 발사됩니다. 그런 다음 모든 행 수준전
삽입
롤 토토는 대상 파티션에서 발사됩니다. 이 모든 롤 토토가 이동중인 행에 영향을 줄 때 놀라운 결과의 가능성을 고려해야합니다. 한After Row
롤 토토가 우려됩니다.이후
삭제
and이후
삽입
롤 토토가 적용됩니다. 하지만이후
업데이트
롤 토토는 적용되지 않기 때문에업데이트
A로 변환되었습니다삭제
and an삽입
. 성명서 수준의 롤 토토에 관한 한,삭제
또는삽입
행 이동이 발생하더라도 롤 토토가 발사됩니다. 만업데이트
롤 토토 롤 토토에 사용 된 대상 테이블에 정의 된 롤 토토업데이트
성명서가 해고됩니다.
별도의 롤 토토가 정의되지 않습니다.병합
. 대신, 명령문 수준 또는 행 수준업데이트
, 삭제
및삽입
롤 토토는 (명령문 수준 트리거의 경우)에 따라 해고됩니다.병합
쿼리 및 (로드 레벨 롤 토토의 경우) 어떤 작업이 수행되는지
a병합
명령, 명령문 수준전
and이후
롤 토토는의 행동에 지정된 이벤트에 대해 해고됩니다병합
행동이 궁극적으로 수행되는지 여부에 관계없이 명령. 이것은와 동일합니다.업데이트
행을 업데이트하지 않는 명령문은 있지만 명세서 수준 롤 토토가 발사됩니다. 로드 레벨 롤 토토는 행이 실제로 업데이트, 삽입 또는 삭제 된 경우에만 해고됩니다. 따라서 특정 유형의 조치에 대해 명세서 수준의 롤 토토가 발사되는 반면 동일한 종류의 행동에 대해 행 수준 롤 토토가 해고되지 않는 것이 완벽합니다.
진술 당 롤 토토가 항상 반환 해야하는 롤 토토 기능null
. 파악 롤 토토로 호출 된 롤 토토 기능은 테이블 행을 반환 할 수 있습니다 (유형 값Heappuple
) 호출 집행자에게 그들이 선택한 경우. 작업이 다음과 같은 선택을하기 전에 발사 된로드 레벨 롤 토토 :
반환 할 수 있습니다null
현재 행의 조작을 건너 뜁니다. 이를 통해 집행자는 롤 토토 (특정 테이블 행의 삽입, 수정 또는 삭제)를 호출 한로드 레벨 작업을 수행하지 않도록 지시합니다..
Row-Level의 경우삽입
and업데이트
롤 토토 만, 반환 된 행은 삽입 될 행이되거나 업데이트되는 행을 교체 할 행이됩니다. 이를 통해 롤 토토 기능이 삽입 또는 업데이트되는 행을 수정할 수 있습니다.
행 수준전
이러한 동작 중 하나를 유발하지 않는 롤 토토 결과 결과에 따라 통과 된 동일한 행을 결과적으로 반환하기 위해주의해야합니다 (즉,NEW
행삽입
및업데이트
롤 토토,old
행삭제
롤 토토).
행 수준대신
롤 토토가 반환해야합니다NULL
보기의 기본 기본 테이블에서 데이터를 수정하지 않았거나 (에 전달 된 뷰 행을 반환해야 함을 나타냅니다.NEW
행삽입
and업데이트
운영 또는old
행삭제
운영). 비 널 리턴 값은 롤 토토가 뷰에서 필요한 데이터 수정을 수행했음을 알리는 데 사용됩니다. 이로 인해 명령에 의해 영향을받는 행의 수가 증가하게됩니다. 을 위한삽입
and업데이트
작동 만 해당하는 롤 토토가 수정할 수 있습니다NEW
반환하기 전에 행. 이것은에 의해 반환 된 데이터를 변경합니다.반환 삽입
또는업데이트 반환
, 뷰가 제공된 것과 동일한 데이터를 정확히 표시하지 않을 때 유용합니다.
운영 후 실행 된로드 레벨 롤 토토에 대해 반환 값이 무시되므로 반환 할 수 있습니다NULL
.
일부 고려 사항은 생성 된 열에 적용됩니다.저장된 생성 열은 다음에 계산됩니다전
롤 토토와 전이후
롤 토토. 따라서 생성 된 값은에서 검사 할 수 있습니다.이후
롤 토토. 안에전
롤 토토,old
행은 예상대로 기존 생성 된 값을 포함하지만NEW
행에는 아직 새 생성 값이 포함되어 있지 않으며 액세스해서는 안됩니다. C 언어 인터페이스 에서이 시점에서 열 내용은 정의되지 않습니다. 더 높은 수준의 프로그래밍 언어는에 저장된 생성 열에 대한 액세스를 방지해야합니다.NEW
a전
롤 토토. a에서 생성 열의 값을 변경합니다.전
롤 토토가 무시되고 덮어 쓸 것입니다.
동일한 관계에서 동일한 이벤트에 대해 둘 이상의 롤 토토가 정의되면 롤 토토가 롤 토토 이름으로 알파벳 순서로 발사됩니다. 의 경우전
and대신
롤 토토, 각 롤 토토에 의해 반환 될 수있는 수정 행은 다음 롤 토토에 대한 입력이됩니다.전
또는대신
롤 토토 리턴NULL
, 해당 행에 작업이 버려지고 후속 롤 토토가 해고되지 않습니다 (해당 행).
롤 토토 정의는 부울을 지정할 수도 있습니다언제
조건. 롤 토토를 발사 해야하는지 확인하기 위해 테스트됩니다. 로드 레벨에서 롤 토토언제
조건은 행의 기존 및/또는 새 값을 검사 할 수 있습니다. (진술 수준 롤 토토도 가질 수 있습니다when
조건, 특징은 그들에게 유용하지는 않지만.)에서.전
롤 토토,언제
조건은 함수가 실행되거나 실행되기 직전에 평가됩니다.언제
롤 토토 함수의 시작 부분에서 동일한 조건을 테스트하는 것과 실질적으로 다르지 않습니다. 그러나에서이후
롤 토토,언제
조건은 행 업데이트가 발생한 직후에 평가되며 명세서 끝에서 롤 토토를 발사하기 위해 이벤트가 대기되는지 여부를 결정합니다. 그래서이후
Trigger 's언제
조건은 TRUE를 반환하지 않으며, 이벤트를 대기하거나 성명서 끝에서 행을 다시 가져올 필요는 없습니다. 이로 인해 롤 토토가 몇 줄에 대해서만 발사되면 많은 행을 수정하는 진술에서 상당한 속도를 높일 수 있습니다.대신
롤 토토는 지원하지 않습니다언제
조건
일반적으로,로드 레벨전
롤 토토는 삽입 또는 업데이트 될 데이터를 확인하거나 수정하는 데 사용됩니다. 예를 들어, A전
롤 토토는 현재 시간을 A에 삽입하는 데 사용될 수 있습니다타임 스탬프
열 또는 행의 두 요소가 일관되어 있는지 확인합니다. 줄 수준이후
롤 토토는 다른 테이블로 업데이트를 전파하거나 다른 테이블에 대한 일관성 검사를하는 데 가장 현명하게 사용됩니다. 이 노동 분업의 이유는 때문입니다.이후
롤 토토는 행의 최종 값이 보이는 반면 A전
롤 토토는 할 수 없습니다. 다른 것이있을 수 있습니다전
그 후 발사를 방지합니다. 방아쇠를 만들 이유가없는 경우전
또는이후
, The전
사례는 더 효율적입니다. 성명서가 끝날 때까지 작업에 대한 정보를 저장할 필요가 없으므로
롤 토토 함수가 SQL 명령을 실행하면이 명령이 다시 롤 토토 될 수 있습니다. 이것은 계단식 롤 토토라고합니다. 캐스케이드 수준의 수에는 직접 제한이 없습니다. 캐스케이드는 동일한 트리거의 재귀 적 호출을 일으킬 수 있습니다. 예를 들어, an삽입
롤 토토는 추가 행을 동일한 테이블에 삽입하는 명령을 실행하여삽입
다시 해고 될 롤 토토. 그러한 시나리오에서 무한 재귀를 피하는 것은 롤 토토 프로그래머의 책임입니다.
외국 키 제약 조건이 참조 조치 (즉, 계단식 업데이트 또는 삭제)를 지정하면 해당 작업이 일반 SQL 업데이트 또는 참조 테이블에서 명령을 삭제하여 수행됩니다. 특히, 참조 테이블에 존재하는 롤 토토는 이러한 변경에 대해 해고됩니다. 이러한 롤 토토가 이러한 명령 중 하나의 효과를 수정하거나 차단하면 최종 결과는 참조 무결성을 깨뜨릴 수 있습니다. 그것을 피하는 것은 롤 토토 프로그래머의 책임입니다.
롤 토토가 정의되면 인수를 지정할 수 있습니다. 롤 토토 정의에 인수를 포함시키는 목적은 유사한 요구 사항을 가진 다른 롤 토토가 동일한 함수를 호출하도록 허용하는 것입니다. 예를 들어, 인수로서 두 개의 열 이름을 가져오고 현재 사용자를 하나의 현재 타임 스탬프에 넣는 일반화 된 롤 토토 함수가있을 수 있습니다. 올바르게 작성된이 롤 토토 기능은 롤 토토중인 특정 테이블과 무관합니다. 따라서 동일한 기능이 사용될 수 있습니다.삽입
예를 들어 트랜잭션 테이블에서 레코드 생성을 자동으로 추적하려면 적절한 열이있는 테이블의 이벤트. 또한로 정의 된 경우 마지막 업데이트 이벤트를 추적하는 데 사용될 수 있습니다.업데이트
롤 토토.
롤 토토를 지원하는 각 프로그래밍 언어에는 롤 토토 입력 데이터를 롤 토토 기능에 사용할 수 있도록 자체 방법이 있습니다. 이 입력 데이터에는 롤 토토 이벤트 유형이 포함됩니다 (예 :삽입
또는업데이트
) 및에 나열된 인수롤 토토 만들기
. 로드 레벨 트리거의 경우 입력 데이터에도가 포함됩니다.NEW
행삽입
및업데이트
롤 토토 및/또는old
행업데이트
및삭제
롤 토토.
기본적으로 명령문 수준 롤 토토는 명세서에 의해 수정 된 개별 행을 검사 할 방법이 없습니다. 하지만이후의 명령문
롤 토토가 요청할 수 있습니다전환 테이블롤 토토에 영향을받는 행 세트를 사용할 수 있도록 만들어집니다.After Row
롤 토토는 전환 테이블을 요청하여 테이블의 총 변경 사항과 현재 해고중인 개별 행의 변경 사항을 볼 수 있습니다. 전환 테이블을 다시 검사하는 방법은 사용중인 프로그래밍 언어에 따라 다르지만 일반적인 접근 방식은 전환 테이블이 롤 토토 기능 내에서 발행 된 SQL 명령에 의해 액세스 할 수있는 읽기 전용 임시 테이블처럼 작용하는 것입니다..
문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면