이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
7984_8040PostgreSQL : 문서 : 17 : 38.4. 완전한 이벤트 스포츠 토토 결과 예버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

38.3. 완전한 이벤트 스포츠 토토 결과 예#

C에 작성된 이벤트 트리거 기능의 매우 간단한 예는 다음과 같습니다. (절차 언어로 작성된 트리거의 예는 절차 언어의 문서에서 찾을 수 있습니다.)

함수noddl호출 할 때마다 예외가 제기됩니다. 이벤트 트리거 정의는 함수를와 연관시켰다.DDL_COMMAND_START이벤트. 효과는 모든 DDL 명령 (에 언급 된 예외와 함께입니다.PostgreSQL : 문서 : 개발 : 38.1. 이벤트 롤 토토 동작 개요)가 실행되지 않도록합니다.

이것은 트리거 함수의 소스 코드입니다 :

#include "postgres.h"

#include "명령/event_trigger.h"
#include "fmgr.h"

PG_MODULE_MAGIC;

pg_function_info_v1 (noddl);

자료
noddl (pg_function_args)

    EventTriggerData *trigdata;

    if (! calling_as_event_trigger (fcinfo)) / * 내부 오류 * /
        elog (오류, "이벤트 트리거 관리자에 의해 발사되지 않음");

    trigdata = (EventTriggerData *) fcinfo- 컨텍스트;

    Ereport (오류,
            (errcode (errcode_insolficiter_privilege),
             errmsg ( "명령 \"%s \ "denied",
                    getCommandTagName (trigdata- tag)));

    pg_return_null ();

소스 코드를 컴파일 한 후 (참조섹션 36.10.5), 함수와 트리거를 선언합니다 :

함수 만들기 noddl () retuds event_trigger를 반환합니다
    'Noddl'언어 C;

DDL_COMMAND_START에서 이벤트 트리거 NODDL을 만듭니다
    함수 실행 noddl ();

이제 스포츠 토토 결과 작업을 테스트 할 수 있습니다 :

=# \ dy
                     이벤트 트리거 목록
 이름 |       이벤트 | 소유자 | 활성화 | 기능 | 태그
-------+-------------------+-------+--------+----------+------
 noddl | DDL_COMMAND_START | 희미한 | 활성화 | noddl |
(1 줄)

=# 생성 테이블 foo (id serial);
오류 : 명령 "테이블 작성"거부

이 상황에서, 그렇게해야 할 때 DDL 명령을 실행하려면 이벤트 스포츠 토토 결과를 떨어 뜨리거나 비활성화해야합니다. 트랜잭션 기간 동안 만 방아쇠를 비활성화하는 것이 편리 할 수 ​​있습니다.

시작;
Alter Event 스포츠 토토 결과 NODDL 비활성화;
테이블 foo (id serial)를 만듭니다.
Alter Event 스포츠 토토 결과 NODDL 활성화;
저지르다;

(이벤트 트리거 자체에 대한 DDL 명령이 이벤트 트리거의 영향을받지 않음을 기억하십시오.)