38.4. 완전한 이벤트 스포츠 토토 베트맨 예#

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

함수노들호출될 때마다 예외가 발생합니다. 함수와 연결된 이벤트 트리거 정의는ddl_command_start이벤트. 그 결과 모든 DDL 명령(에 언급된 예외 포함)PostgreSQL : 문서 : 17 : 38.1. 토토 사이트 추천 트리거 동작 개요)가 실행되지 않습니다.

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

#include "postgres.h"

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

PG_MODULE_MAGIC;

PG_FUNCTION_INFO_V1(noddl);

데이텀
끄덕끄덕(PG_FUNCTION_ARGS)

    EventTriggerData *trigdata;

    if (!CALLED_AS_EVENT_TRIGGER(fcinfo)) /* 내부 오류 */
        elog(ERROR, "이벤트 스포츠 토토 베트맨 관리자에 의해 실행되지 않았습니다.");

    trigdata = (EventTriggerData *) fcinfo-context;

    ereport(오류,
            (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
             errmsg("\"%s\" 명령이 거부되었습니다",
                    GetCommandTagName(trigdata-tag))));

    PG_RETURN_NULL();

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

함수 생성 noddl() 반환 event_trigger
    AS 'noddl' 언어 C;

ddl_command_start에서 이벤트 트리거 noddl 생성
    함수 실행 noddl();

이제 스포츠 토토 베트맨 작동을 테스트할 수 있습니다:

=# \dy
                     이벤트 트리거 목록
 이름 |       이벤트 | 소유자 | 활성화됨 | 기능 | 태그
--------+------+-------+---------+---------+------
 끄덕끄덕 | ddl_command_start | 어두워 | 활성화 | 끄덕끄덕 |
(1줄)

=# CREATE TABLE foo(id 일련번호);
오류: "CREATE TABLE" 명령이 거부되었습니다.

이 상황에서 필요할 때 일부 DDL 명령을 실행할 수 있으려면 이벤트 스포츠 토토 베트맨를 삭제하거나 비활성화해야 합니다. 트랜잭션 기간 동안에만 스포츠 토토 베트맨를 비활성화하는 것이 편리할 수 있습니다.

시작;
ALTER EVENT TRIGGER noddl 비활성화;
CREATE TABLE foo(ID 일련번호);
ALTER EVENT TRIGGER noddl 활성화;
커밋;

(이벤트 스포츠 토토 베트맨 자체의 DDL 명령은 이벤트 스포츠 토토 베트맨의 영향을 받지 않는다는 점을 기억하세요.)

수정 사항 제출

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