Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng kèo bóng đá pháp trang chohiện tạiPhiên bản hoặc kèo bóng đá pháp trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

38.3. Một ví dụ kèo bóng đá pháp hoàn chỉnh#

Đây là một ví dụ rất đơn giản về hàm kèo bóng đá pháp được viết trong C. (Ví dụ về các trình kích hoạt được viết bằng ngôn ngữ thủ tục có thể được tìm thấy trong tài liệu của các ngôn ngữ thủ tục.)

hàmNODDLlàm tăng một ngoại lệ mỗi khi nó được gọi. Định nghĩa kèo bóng đá pháp liên quan đến chức năng vớiDDL_Command_Startkèo bóng đá pháp. Hiệu ứng là tất cả các lệnh DDL (với các ngoại lệ được đề cập trongPhần 38.1) được ngăn chặn chạy.

Đây là mã nguồn của hàm kèo bóng đá pháp:

#include "Postgres.h"

#include "lệnh/event_trigger.h"
#include "fmgr.h"

Pg_module_magic;

Pg_function_info_v1 (NODDL);

Mốc thời gian
NODDL (pg_function_args)

    EventTriggerData *TrigData;

    if (! gọi_AS_EVENT_TRIGGER (fcinfo)) / * lỗi nội bộ * /
        ELOG (Lỗi, "không bị kích hoạt bởi Trình quản lý kèo bóng đá pháp");

    TrigData = (EventTriggerData *) fcinfo- bối cảnh;

    ereport (lỗi,
            (errcode (errcode_insuffn đủ
             errmsg ("lệnh \"%s \ "bị từ chối",
                    GetCommandTagName (TrigData- tag))));

    Pg_return_null ();

Sau khi bạn đã biên dịch mã nguồn (xemPhần 36.10.5), khai báo chức năng và các kèo bóng đá pháp:

Tạo hàm NodDl () returns Event_Trigger
    Như ngôn ngữ 'gật đầu' c;

Tạo sự kiện kèo bóng đá pháp NODDL trên ddl_command_start
    Thực thi chức năng NODDL ();

Bây giờ bạn có thể kiểm tra hoạt động của bộ kèo bóng đá pháp:

11153_11471

Trong tình huống này, để có thể chạy một số lệnh DDL khi bạn cần làm như vậy, bạn phải bỏ trình kèo bóng đá pháp hoặc vô hiệu hóa nó. Có thể thuận tiện để vô hiệu hóa kích hoạt trong thời gian giao dịch:

Bắt đầu;
Thay đổi kèo bóng đá pháp NODDL vô hiệu hóa;
Tạo bảng foo (id nối tiếp);
Thay đổi kèo bóng đá pháp kích hoạt NODDL;
LÀM;

(Nhớ lại rằng các lệnh DDL trên các kèo bóng đá pháp không bị ảnh hưởng bởi các kèo bóng đá pháp.)