37.1. 토토 사이트 동작 개요#

토토 사이트는 특정 유형의 작업이 수행될 때마다 데이터베이스가 자동으로 특정 기능을 실행해야 한다는 사양입니다. 토토 사이트는 테이블(파티셔닝 여부와 상관없이), 뷰, 외부 테이블에 연결할 수 있습니다.

테이블 및 외부 테이블에서 토토 사이트는 이전 또는 이후에 실행되도록 정의할 수 있습니다.삽입, 업데이트, 또는삭제작업, 수정된 행당 한 번 또는 행당 한 번SQL진술.업데이트또한 특정 열이 언급된 경우에만 토토 사이트가 실행되도록 설정할 수 있습니다.SET의 절업데이트성명. 토토 사이트는 다음에 대해 실행될 수도 있습니다.잘라내기문장. 토토 사이트 이벤트가 발생하면 이벤트를 처리하기 위해 적절한 시간에 토토 사이트 함수가 호출됩니다.

뷰에서는 대신 실행되도록 토토 사이트를 정의할 수 있습니다.삽입, 업데이트또는삭제작업. 그런대신토토 사이트는 보기에서 수정해야 하는 각 행에 대해 한 번씩 실행됩니다. 뷰의 기본 테이블에 필요한 수정을 수행하고, 적절한 경우 뷰에 표시될 수정된 행을 반환하는 것은 토토 사이트 기능의 책임입니다. 뷰에 대한 토토 사이트는 1회당 한 번씩 실행되도록 정의할 수도 있습니다.SQL문, 이전 또는 이후삽입, 업데이트또는삭제작업. 그러나 이러한 토토 사이트는 다음이 있는 경우에만 실행됩니다.대신뷰를 토토 사이트합니다. 그렇지 않으면 뷰를 대상으로 하는 모든 명령문은 기본 기본 테이블에 영향을 미치는 명령문으로 다시 작성되어야 하며, 그러면 실행될 토토 사이트는 기본 테이블에 연결된 토토 사이트입니다.

토토 사이트 자체가 생성되기 전에 토토 사이트 기능을 정의해야 합니다. 토토 사이트 함수는 인수를 사용하지 않고 유형을 반환하는 함수로 선언되어야 합니다.토토 사이트. (토토 사이트 함수는 특별히 전달된 메소드를 통해 입력을 받습니다.토토 사이트데이터구조, 일반적인 함수 인수 형식이 아닙니다.)

적절한 토토 사이트 기능이 생성되면 토토 사이트는 다음을 사용하여 설정됩니다.토토 사이트 생성. 여러 토토 사이트에 동일한 토토 사이트 기능을 사용할 수 있습니다.

PostgreSQL둘 다 제공행당토토 사이트 및문별토토 사이트. 행별 토토 사이트를 사용하면 토토 사이트 함수는 토토 사이트를 실행한 문에 의해 영향을 받는 각 행에 대해 한 번씩 호출됩니다. 대조적으로, 명령문별 토토 사이트는 해당 명령문의 영향을 받는 행 수에 관계없이 적절한 명령문이 실행될 때 한 번만 호출됩니다. 특히, 0개의 행에 영향을 미치는 명령문은 여전히 ​​적용 가능한 명령문별 토토 사이트를 실행하게 됩니다. 이 두 가지 유형의 토토 사이트를 때때로 호출합니다.행 수준토토 사이트 및문 수준각각 토토 사이트됩니다. 토토 사이트 대상:잘라내기행별이 아닌 문 수준에서만 정의할 수 있습니다.

토토 사이트는 실행 여부에 따라 분류됩니다.이전, 이후또는대신에작업. 이를 다음과 같이 지칭합니다.이전토토 사이트,이후토토 사이트 및대신각각 토토 사이트됩니다. 명령문 수준이전문이 작업을 시작하기 전에 자연스럽게 토토 사이트되는 반면, 문 수준이후문의 끝부분에서 실행을 유발합니다. 이러한 유형의 토토 사이트는 테이블, 뷰 또는 외부 테이블에 정의될 수 있습니다. 행 수준이전특정 행이 작업되기 직전에 실행을 토토 사이트하는 반면 행 수준이후문의 끝에서 토토 사이트가 실행됩니다(그러나 문 수준 이전이후토토 사이트). 이러한 유형의 토토 사이트는 뷰가 아닌 테이블과 외부 테이블에만 정의될 수 있습니다.대신토토 사이트는 뷰에서만 정의할 수 있으며 행 수준에서만 정의할 수 있습니다. 뷰의 각 행이 작업이 필요한 것으로 식별되면 즉시 실행됩니다.

의 실행이후토토 사이트가 다음과 같이 정의된 경우 명령문 끝이 아닌 트랜잭션 끝으로 연기될 수 있습니다.제약 토토 사이트. 모든 경우에 토토 사이트는 이를 토토 사이트한 문과 동일한 트랜잭션의 일부로 실행되므로 문이나 토토 사이트 중 하나가 오류를 발생시키는 경우 두 가지 모두의 효과가 롤백됩니다. 또한 토토 사이트 함수가 다음과 같이 표시되지 않는 한 토토 사이트는 항상 토토 사이트 이벤트를 대기열에 넣은 역할로 실행됩니다.보안 정의자, 이 경우 함수 소유자로 실행됩니다.

만일삽입포함충돌 시 업데이트를 하세요절, 행 수준에서 가능이전 삽입그리고 나서이전 업데이트토토 사이트된 행에서 실행될 토토 사이트입니다. 토토 사이트가 멱등성이 아닌 경우 이러한 상호 작용은 복잡할 수 있습니다.이전 삽입토토 사이트는 다음에 의해 표시됩니다.이전 업데이트토토 사이트(변경 사항 포함)제외됨열.

명령문 수준에 유의하세요업데이트토토 사이트가 실행되는 경우충돌 시 업데이트를 하세요행이 영향을 받았는지 여부에 관계없이 지정됩니다.업데이트(대안 여부에 관계없이업데이트경로를 사용한 적이 있습니다). 안삽입그리고충돌 시 업데이트를 하세요절은 명령문 수준을 실행합니다이전 삽입먼저 토토 사이트한 다음 명령문 수준이전 업데이트토토 사이트, 이어서 명령문 수준이후 업데이트토토 사이트 및 마지막으로 명령문 수준이후 삽입토토 사이트.

상속 또는 분할 계층의 상위 테이블을 대상으로 하는 명령문은 영향을 받는 하위 테이블의 명령문 수준 토토 사이트를 실행시키지 않습니다. 상위 테이블의 명령문 수준 토토 사이트만 실행됩니다. 그러나 영향을 받은 하위 테이블의 행 수준 토토 사이트는 실행됩니다.

만일업데이트파티션된 테이블에서 행이 다른 파티션으로 이동하게 되면 다음과 같이 수행됩니다.삭제원본 파티션과 그 뒤에삽입새 파티션으로 이동하세요. 이 경우 모든 행 수준이전 업데이트토토 사이트 및 모든 행 수준이전 삭제토토 사이트는 원래 파티션에서 실행됩니다. 그런 다음 모든 행 수준이전 삽입토토 사이트가 대상 파티션에서 실행됩니다. 이러한 모든 토토 사이트가 이동 중인 행에 영향을 미칠 때 놀라운 결과가 발생할 가능성을 고려해야 합니다. 한행 이후토토 사이트가 우려됩니다.이후 삭제그리고이후 삽입토토 사이트가 적용됩니다. 하지만이후 업데이트토토 사이트는 다음 때문에 적용되지 않습니다.업데이트a로 변환되었습니다.삭제그리고삽입. 명령문 수준 토토 사이트에 관한 한 다음 중 어느 것도 없습니다.삭제또는삽입행 이동이 발생하더라도 토토 사이트가 실행됩니다. 오직업데이트다음에 사용된 대상 테이블에 정의된 토토 사이트업데이트문이 실행됩니다.

별도의 토토 사이트가 정의되지 않았습니다.병합. 대신 명령문 수준 또는 행 수준업데이트, 삭제삽입토토 사이트는 명령문 수준 토토 사이트의 경우)에 지정된 작업에 따라 실행됩니다.병합쿼리 및 (행 수준 토토 사이트의 경우) 수행되는 작업을 확인합니다.

실행 중병합명령, 명령문 수준이전그리고이후토토 사이트는 작업에 지정된 이벤트에 대해 실행됩니다.병합명령은 작업이 최종적으로 수행되는지 여부에 관계없이 실행됩니다. 이는 와 동일합니다.업데이트행을 업데이트하지 않는 명령문이지만 명령문 수준 토토 사이트가 실행됩니다. 행 수준 토토 사이트는 행이 실제로 업데이트, 삽입 또는 삭제될 때만 실행됩니다. 따라서 특정 유형의 작업에 대해 문 수준 토토 사이트가 실행되지만 동일한 종류의 작업에 대해 행 수준 토토 사이트가 실행되지 않는 것은 완전히 합법적입니다.

문별 토토 사이트에 의해 호출된 토토 사이트 함수는 항상 반환되어야 합니다.NULL. 행별 토토 사이트에 의해 호출된 토토 사이트 함수는 테이블 행(유형의 값)을 반환할 수 있습니다.HeapTuple) 호출 실행자(선택한 경우)에게 전달됩니다. 작업 전에 실행되는 행 수준 토토 사이트에는 다음 선택 사항이 있습니다.

  • 돌아올 수 있습니다NULL현재 행에 대한 작업을 건너뜁니다. 이는 토토 사이트를 호출한 행 수준 작업(특정 테이블 행의 삽입, 수정 또는 삭제)을 수행하지 않도록 실행자에게 지시합니다.

  • 행 수준의 경우삽입그리고업데이트토토 사이트만, 반환된 행은 업데이트되는 행을 삽입하거나 대체할 행이 됩니다. 이를 통해 토토 사이트 함수가 삽입되거나 업데이트되는 행을 수정할 수 있습니다.

행 수준이전이러한 동작 중 하나를 발생시키려는 의도가 없는 토토 사이트는 전달된 것과 동일한 행을 결과로 반환하도록 주의해야 합니다(즉,신규삽입그리고업데이트토토 사이트,오래된삭제토토 사이트).

행 수준대신토토 사이트는 둘 중 하나를 반환해야 합니다.NULL뷰의 기본 기본 테이블에서 데이터를 수정하지 않았거나 전달된 뷰 행을 반환해야 함을 나타냅니다(신규삽입그리고업데이트작업 또는오래된삭제작업). Null이 아닌 반환 값은 토토 사이트가 뷰에서 필요한 데이터 수정을 수행했음을 알리는 데 사용됩니다. 이렇게 하면 명령의 영향을 받는 행 수가 증가합니다. 을 위한삽입그리고업데이트작업 전용, 토토 사이트는 다음을 수정할 수 있습니다.신규행을 반환하기 전에. 그러면 반환된 데이터가 변경됩니다.반환 삽입또는업데이트 반환 중, 제공된 데이터와 정확히 동일한 데이터가 뷰에 표시되지 않을 때 유용합니다.

작업 후에 실행된 행 수준 토토 사이트의 경우 반환 값이 무시되므로 반환할 수 있습니다.NULL.

생성된 열에는 몇 가지 고려 사항이 적용됩니다.저장된 생성 열은 다음 이후에 계산됩니다.이전토토 사이트 및 이전이후토토 사이트. 따라서 생성된 값은 다음에서 확인할 수 있습니다.이후토토 사이트. 에서이전토토 사이트,오래된행에는 예상한 대로 이전에 생성된 값이 포함되어 있지만신규행에는 새로 생성된 값이 아직 포함되어 있지 않으므로 액세스하면 안 됩니다. C 언어 인터페이스에서는 이 시점에서 열의 내용이 정의되지 않습니다. 더 높은 수준의 프로그래밍 언어는에 저장된 생성 열에 대한 액세스를 방지해야 합니다.신규행의 행이전토토 사이트. a에서 생성된 열 값 변경이전토토 사이트는 무시되고 덮어쓰여집니다. 토토 사이트가 실행될 때 가상 생성 열은 계산되지 않습니다. C 언어 인터페이스에서는 해당 내용이 토토 사이트 함수에서 정의되지 않습니다. 더 높은 수준의 프로그래밍 언어는 토토 사이트의 가상 생성 열에 대한 액세스를 방지해야 합니다.

동일한 관계의 동일한 이벤트에 대해 둘 이상의 토토 사이트가 정의된 경우 토토 사이트는 토토 사이트 이름에 따라 알파벳 순서로 실행됩니다. 의 경우이전그리고대신토토 사이트, 각 토토 사이트에서 반환된 수정 가능성이 있는 행은 다음 토토 사이트에 대한 입력이 됩니다. 있다면이전또는대신토토 사이트 반환NULL, 해당 행에 대한 작업이 중단되고 후속 토토 사이트가 (해당 행에 대해) 실행되지 않습니다.

토토 사이트 정의는 부울을 지정할 수도 있습니다.언제조건, 토토 사이트가 실행되어야 하는지 확인하기 위해 테스트됩니다. 행 수준에서 토토 사이트는언제조건은 행 열의 이전 및/또는 새 값을 검사할 수 있습니다. (문 수준 토토 사이트도 다음을 가질 수 있습니다.언제조건이지만 이 기능은 그다지 유용하지 않습니다.) a이전토토 사이트, 그언제조건은 함수가 실행되거나 실행되기 직전에 평가되므로 다음을 사용합니다.언제은 토토 사이트 기능 시작 시 동일한 조건을 테스트하는 것과 크게 다르지 않습니다. 그러나,이후토토 사이트, 그언제조건은 행 업데이트가 발생한 직후 평가되며 명령문 끝에서 토토 사이트를 실행하기 위해 이벤트가 대기열에 있는지 여부를 결정합니다. 그래서 언제이후토토 사이트의언제조건이 true를 반환하지 않으면 이벤트를 대기열에 넣거나 명령문 끝에서 행을 다시 가져올 필요가 없습니다. 이로 인해 토토 사이트가 일부 행에 대해서만 실행되어야 하는 경우 많은 행을 수정하는 문의 속도가 크게 향상될 수 있습니다.대신토토 사이트는 지원하지 않습니다.언제조건.

일반적으로 행 수준이전토토 사이트는 삽입되거나 업데이트될 데이터를 확인하거나 수정하는 데 사용됩니다. 예를 들어,이전토토 사이트는 현재 시간을 a에 삽입하는 데 사용될 수 있습니다.타임스탬프열 또는 행의 두 요소가 일치하는지 확인합니다. 행 수준이후토토 사이트는 업데이트를 다른 테이블에 전파하거나 다른 테이블에 대해 일관성을 검사하는 데 가장 현명하게 사용됩니다. 이러한 노동 분업의 이유는 다음과 같습니다.이후토토 사이트는 행의 최종 값을 보고 있음을 확신할 수 있지만 a이전토토 사이트를 실행할 수 없습니다. 다른 것이 있을 수도 있습니다이전그 이후에 발사가 시작됩니다. 토토 사이트를 할 특별한 이유가 없는 경우이전또는이후, 그이전case가 더 효율적입니다. 작업에 대한 정보는 명령문이 끝날 때까지 저장할 필요가 없기 때문입니다.

토토 사이트 함수가 SQL 명령을 실행하면 이 명령은 토토 사이트를 다시 실행할 수 있습니다. 이를 계단식 토토 사이트라고 합니다. 캐스케이드 레벨 수에는 직접적인 제한이 없습니다. 계단식 배열로 인해 동일한 토토 사이트가 재귀적으로 호출될 수 있습니다. 예를 들어,삽입토토 사이트는 동일한 테이블에 추가 행을 삽입하는 명령을 실행할 수 있으며, 이로 인해삽입토토 사이트가 다시 실행됩니다. 이러한 시나리오에서 무한 재귀를 방지하는 것은 토토 사이트 프로그래머의 책임입니다.

외래 키 제약 조건이 참조 작업(즉, 계단식 업데이트 또는 삭제)을 지정하는 경우 해당 작업은 일반 SQL을 통해 수행됩니다.업데이트또는삭제27935_28260

토토 사이트가 정의될 때 이에 대한 인수를 지정할 수 있습니다. 토토 사이트 정의에 인수를 포함하는 목적은 유사한 요구 사항을 가진 다양한 토토 사이트가 동일한 함수를 호출할 수 있도록 하는 것입니다. 예를 들어, 두 개의 열 이름을 인수로 사용하고 현재 사용자를 하나에 배치하고 현재 타임스탬프를 다른 하나에 배치하는 일반화된 토토 사이트 함수가 있을 수 있습니다. 올바르게 작성되면 이 토토 사이트 함수는 토토 사이트되는 특정 테이블과 독립적입니다. 따라서 동일한 기능을 사용할 수 있습니다.삽입적절한 열이 있는 모든 테이블의 이벤트를 사용하여 예를 들어 트랜잭션 테이블의 레코드 생성을 자동으로 추적합니다. 또한 다음과 같이 정의된 경우 마지막 업데이트 이벤트를 추적하는 데 사용할 수도 있습니다.업데이트토토 사이트.

토토 사이트를 지원하는 각 프로그래밍 언어에는 토토 사이트 기능에 사용할 수 있는 토토 사이트 입력 데이터를 만드는 고유한 방법이 있습니다. 이 입력 데이터에는 토토 사이트 이벤트 유형이 포함됩니다(예:삽입또는업데이트) 및 다음에 나열된 모든 인수토토 사이트 생성. 행 수준 토토 사이트의 경우 입력 데이터에는 다음도 포함됩니다.신규삽입그리고업데이트토토 사이트 및/또는오래된업데이트그리고삭제토토 사이트.

기본적으로 명령문 수준 토토 사이트에는 명령문에 의해 수정된 개별 행을 검사할 수 있는 방법이 없습니다. 하지만명령문 이후토토 사이트가 요청할 수 있음전환 테이블영향을 받은 행 세트를 토토 사이트에 사용할 수 있도록 생성됩니다.행 이후토토 사이트는 또한 전환 테이블을 요청할 수 있으므로 테이블의 전체 변경 사항은 물론 현재 실행 중인 개별 행의 변경 사항도 볼 수 있습니다. 전이 테이블을 다시 검사하는 방법은 사용 중인 프로그래밍 언어에 따라 다르지만 일반적인 접근 방식은 전이 테이블이 토토 사이트 함수 내에서 실행된 SQL 명령으로 액세스할 수 있는 읽기 전용 임시 테이블처럼 작동하도록 만드는 것입니다.

수정 사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.