pl/pgsql데이터 변경 또는 데이터베이스 이벤트에서 윈 토토 기능을 정의하는 데 사용할 수 있습니다. 윈 토토 함수는로 생성됩니다.함수 만들기
명령, 인수가없고 반환 유형의 함수로 선언윈 토토
(데이터 변경 윈 토토 용) 또는event_trigger
(데이터베이스 이벤트 윈 토토 용). 특별 지역 변수 이름TG_
통화를 유발 한 조건을 설명하기 위해 자동으로 정의됩니다.뭔가
a토토 꽁 머니 : 문서인수가없고 반환 유형의 함수로 선언됩니다윈 토토
. 에 명시된 일부 인수를받을 것으로 예상되는 경우에도 기능은 인수없이 선언되어야합니다.윈 토토 만들기
- 그러한 주장은를 통해 전달됩니다tg_argv
, 아래 설명 된대로.
언제pl/pgsql함수는 윈 토토라고하며, 여러 특수 변수는 최상위 블록에서 자동으로 생성됩니다. 그들은 :
NEW
데이터 유형레코드
; 새 데이터베이스 행을 보유하는 변수삽입
/업데이트
행 수준 트리거의 작동. 이 변수는 명령문 수준 윈 토토가 무효이며삭제
운영.
old
데이터 유형레코드
; 기존 데이터베이스 행을 보유하는 변수업데이트
/삭제
행 수준 트리거의 작동. 이 변수는 명령문 수준 윈 토토가 무효이며삽입
운영.
tg_name
데이터 유형이름
; 방아쇠의 이름이 실제로 해고 된 변수.
TG_WHEN
데이터 유형텍스트
; 문자열전
,이후
또는대신
14295_14337
tg_level
데이터 유형텍스트
; 둘 중 하나Row
또는진술
방아쇠의 정의에 따라
TG_OP
데이터 유형텍스트
; 문자열삽입
,업데이트
,삭제
또는Truncate
윈 토토가 발생한 작업이 발생했는지 알려줍니다.
TG_RELID
데이터 유형OID
; 윈 토토 호출을 일으킨 테이블의 객체 ID.
tg_relname
데이터 유형이름
; 윈 토토 호출을 일으킨 테이블의 이름.tg_table_name
대신.
tg_table_name
데이터 유형이름
; 윈 토토 호출을 일으킨 테이블의 이름.
tg_table_schema
데이터 유형이름
; 윈 토토 호출을 일으킨 테이블 스키마의 이름.
tg_nargs
데이터 유형Integer
; 의 윈 토토 함수에 대한 인수의 수윈 토토 만들기
진술.
tg_argv []
데이터 유형 배열텍스트
; 의 논쟁윈 토토 만들기
진술. 인덱스는 0에서 카운트합니다. 유효하지 않은 인덱스 (0보다 작거나tg_nargs
) null 값을 초래합니다.
윈 토토 함수는 어느 쪽이든 반환해야합니다NULL
또는 테이블의 구조를 가진 레코드/행 값은 윈 토토가 발사되었습니다.
로드 레벨 윈 토토 발사전
NULL을 반환하여 윈 토토 관리자 에게이 행의 나머지 작업을 건너 뛰도록 신호를 보내십시오 (즉, 후속 윈 토토가 발사되지 않고삽입
/업데이트
/삭제
이 행에는 발생하지 않습니다). unnull 값이 반환되면 작업은 해당 행 값으로 진행됩니다.NEW
삽입 또는 업데이트 될 행을 변경합니다. 따라서 윈 토토 함수가 윈 토토 조치가 행 값을 변경하지 않고 정상적으로 성공하기를 원한다면NEW
(또는 동일한 값)를 반환해야합니다. 저장 될 행을 변경하려면 직접 단일 값을 대체 할 수 있습니다NEW
수정 된 반환NEW
또는 또는 반품 할 완전한 새 기록/행을 구축합니다. 전 트리거의 경우삭제
, 반환 된 값은 직접적인 영향을 미치지 않지만 윈 토토 조치를 진행할 수 있도록 unnull이어야합니다. 참고NEW
삭제
윈 토토, 따라서 반환하는 것은 일반적으로 합리적이지 않습니다. 일반적인 관용구삭제
윈 토토는 반환됩니다old
.
대신
윈 토토 (항상로드 레벨 윈 토토이며 시야에서만 사용될 수 있음)는 업데이트를 수행하지 않았다는 신호로 NULL을 반환 할 수 있으며이 행의 나머지 작업은 건너 뜁니다 (즉, 이후 윈 토토가 발사되지 않아야하며 행은 주변 환경에 적합하지 않아야합니다.삽입
/업데이트
/삭제
). 그렇지 않으면 윈 토토가 요청 된 작업을 수행했음을 알리려면 unnull 값을 반환해야합니다.삽입
and업데이트
운영, 반환 값은이어야합니다NEW
, 윈 토토 함수가 지원하도록 수정할 수있는리턴 삽입
and업데이트 반환
(이것은 후속 윈 토토에게 전달 된 행 값에도 영향을 미치거나 특별한 사람에게 전달됩니다제외
AN 내 별칭 참조삽입
진술충돌에서 업데이트
절). 을 위한삭제
운영, 반환 값은이어야합니다.old
.
로드 레벨 트리거의 반환 값이 발사되었습니다이후
또는 명세서 수준 윈 토토 발사전
또는이후
항상 무시됩니다. 그것은 널가 될 수도 있습니다.
예 43.3윈 토토 함수의 예를 보여줍니다pl/pgsql.
예 43.3.에이pl/pgsql윈 토토 함수
이 예제 윈 토토는 테이블에 행이 삽입되거나 업데이트 될 때마다 현재 사용자 이름과 시간이 행에 찍혀 있는지 확인합니다. 그리고 직원의 이름이 주어지고 급여가 긍정적 인 가치인지 확인합니다.
테이블 emp 생성 (
테이블 로그를 로그하는 또 다른 방법은 각각 삽입, 업데이트 또는 삭제에 대해 행을 보유하는 새 테이블을 만드는 것과 관련이 있습니다. 이 접근법은 테이블에 대한 감사 변경으로 생각할 수 있습니다.예 43.4감사 윈 토토 기능의 예를 보여줍니다PL/PGSQL.
예 43.4.에이pl/pgsql감사를위한 윈 토토 기능
이 예제 윈 토토는에서 행을 삽입, 업데이트 또는 삭제하는지 확인합니다.emp
테이블이 기록되어 있습니다 (예 : 감사)emp_audit
테이블. 현재 시간과 사용자 이름은 수행 된 작업 유형과 함께 행에 찍혀 있습니다.
테이블 emp 제작 (
이전 예제의 변형은 메인 테이블을 감사 테이블에 연결하는 뷰를 사용하여 각 항목이 마지막으로 수정되었을 때를 표시합니다. 이 접근법은 여전히 테이블 변경의 전체 감사 트레일을 기록하지만 감사 트레일의 단순화 된 관점을 제시하여 각 항목에 대한 감사 트레일에서 파생 된 마지막 수정 된 타임 스탬프 만 보여줍니다..예 43.5뷰에서 감사 트리거의 예를 보여줍니다pl/pgsql.
예 43.5.에이pl/pgsql감사를위한 윈 토토 기능보기
이 예제는보기에서 윈 토토를 사용하여 업데이트 가능하고 뷰에서 행을 삽입, 업데이트 또는 삭제하는지 확인하십시오 (예 : 감사)emp_audit
테이블. 현재 시간과 사용자 이름은 수행 된 작업 유형과 함께 기록되며, View는 각 행의 마지막 수정 시간을 표시합니다.
테이블 emp 생성 (
윈 토토를 한 번 사용하는 것은 다른 테이블의 요약 테이블을 유지하는 것입니다. 결과 요약은 특정 쿼리에 대해 원래 테이블 대신에 사용될 수 있습니다. 종종 실행 시간이 크게 줄어 듭니다.예 43.6윈 토토 함수의 예를 보여줍니다PL/PGSQL데이터웨어 하우스의 사실 테이블에 대한 요약 테이블을 유지합니다.
예 43.6.에이pl/pgsql요약 테이블을 유지하기위한 윈 토토 함수
여기에 자세히 설명 된 스키마는 부분적으로입니다.식료품 점예제데이터웨어 하우스 툴킷By Ralph Kimball.
-
이후
윈 토토도 사용할 수 있습니다전환 테이블윈 토토 진술에 의해 변경된 전체 행 세트를 검사합니다. 그만큼윈 토토 만들기
명령은 이름을 하나 또는 두 전환 테이블에 할당 한 다음 해당 이름을 읽기 전용 임시 테이블 인 것처럼 지정할 수 있습니다..예 43.7예를 보여줍니다.
예 43.7.전환 테이블을 사용한 감사
이 예제는와 동일한 결과를 생성합니다.예 43.4, 그러나 모든 행에 해고되는 윈 토토를 사용하는 대신 전환 테이블에서 관련 정보를 수집 한 후 명세서 당 한 번 발사되는 윈 토토를 사용합니다. 호출 문이 많은 행을 수정했을 때로드 윈 토토 접근법보다 훨씬 빠를 수 있습니다.참조
조항은 각 사례마다 달라야합니다. 그러나 우리가 선택한 경우 단일 윈 토토 기능을 사용하는 것을 막지는 않습니다.TG_OP
.)
테이블 emp 생성 (
pl/pgsql정의에 사용될 수 있습니다PostgreSQL : 문서 : 11 : 40 장. 이벤트 배트맨 토토.PostgreSQL이벤트 윈 토토로 호출되는 함수는 인수가없고 반환 유형의 함수로 선언되어야합니다event_trigger
.
언제PL/PGSQL함수를 이벤트 윈 토토라고하며, 여러 특수 변수가 최상위 블록에서 자동으로 생성됩니다. 그들은 :
tg_event
데이터 유형텍스트
; 윈 토토가 발사 된 이벤트를 나타내는 문자열.
TG_TAG
데이터 유형텍스트
; 윈 토토가 발사되는 명령 태그가 포함 된 변수.
예 43.8이벤트 윈 토토 함수의 예를 보여줍니다pl/pgsql.
예 43.8.에이pl/pgsql이벤트 윈 토토 함수
이 예제 윈 토토는 단순히 a를 올립니다.통지
지원되는 명령이 실행될 때마다 메시지.
함수 생성 또는 교체 snitch ()는 event_trigger를 $$로 반환합니다