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 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
Tài liệu này dành tỷ lệ kèo bóng đá phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang tỷ lệ kèo bóng đáhiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

tỷ lệ kèo bóng đáTạo CÒ SÚNG

tên

Tạo Trigger-Xác định trình kích tỷ lệ kèo bóng đá mới

Synopsis

Tạo [ràng buộc] Triggertêntrước | Sau | Thay vìSự kiện[hoặc ...]
    TRÊNTable_Name[từtham chiếu_table_name]
    [Không thể bảo vệ | [Có thể bảo vệ] Ban đầu ngay lập tức | Ban đầu bị trì hoãn]
    [tỷ lệ kèo bóng đá [mỗi] hàng | TUYÊN BỐ  ]
    [ KHI (điều kiện)]]
    Thực hiện thủ tụcfunction_name(Đối số)WHERESự kiệncó thể là một trong số:Chèn
    Cập nhật [củaCột_name[, ...]]
    XÓA BỎ
    Cắt ngắn

Mô tả

tỷ lệ kèo bóng đáTạo một bộ kích tỷ lệ kèo bóng đá mới. Kích tỷ lệ kèo bóng đá sẽ được liên kết với bảng hoặc chế độ xem được chỉ định và Sẽ thực thi chức năng được chỉ địnhfunction_nameKhi xảy ra sự kiện nhất định.

Trình kích tỷ lệ kèo bóng đá có thể được chỉ định để bắn trước khi tỷ lệ kèo bóng đá động là Đã thử trên một hàng (trước khi các ràng buộc được kiểm tra vàChèn, Cập nhật,, hoặcXóađược cố gắng); hoặc sau tỷ lệ kèo bóng đá động đã hoàn thành (sau khi các ràng buộc được kiểm tra vàChèn, Cập nhật,, hoặcXóađã hoàn thành); hoặc thay vì tỷ lệ kèo bóng đá động (trong trường hợp chèn, cập nhật hoặc xóa trên xem). Nếu kích tỷ lệ kèo bóng đá bắn trước hoặc thay vì sự kiện, Trình kích tỷ lệ kèo bóng đá có thể bỏ qua tỷ lệ kèo bóng đá động cho hàng hiện tại hoặc thay đổi hàng được chèn (choChènCập nhậtChỉ tỷ lệ kèo bóng đá động). Nếu kích tỷ lệ kèo bóng đá Các vụ cháy sau sự kiện, tất cả các thay đổi, bao gồm cả những ảnh hưởng của Trình kích tỷ lệ kèo bóng đá, là"hiển thị"đến cò súng.

Một kích tỷ lệ kèo bóng đá được đánh dấutỷ lệ kèo bóng đá mỗi hàngđược gọi một lần cho mỗi hàng mà tỷ lệ kèo bóng đá động sửa đổi. Vì Ví dụ, AXóaảnh hưởng đến 10 hàng sẽ gây ra bất kỳtrên xóaTriggers trên mối quan hệ mục tiêu được gọi là 10 lần riêng biệt, một lần cho mỗi Hàng bị xóa. Ngược lại, một kích tỷ lệ kèo bóng đá được đánh dấuĐối với mỗi câuChỉ thực hiện một lần cho bất kỳ cho bất kỳ tỷ lệ kèo bóng đá động, bất kể nó sửa đổi bao nhiêu hàng (đặc biệt, một tỷ lệ kèo bóng đá động sửa đổi các hàng bằng không vẫn sẽ dẫn đến thực hiện bất kỳ ứng dụng nàotỷ lệ kèo bóng đá mỗi TUYÊN BỐTriggers).

Trình kích tỷ lệ kèo bóng đá được chỉ định để bắnThay vào đó CỦASự kiện kích tỷ lệ kèo bóng đá phải được đánh dấutỷ lệ kèo bóng đá Mỗi hàngvà chỉ có thể được xác định trên các lượt xem.trướcsauTriggers trên một chế độ xem phải được đánh dấu làtỷ lệ kèo bóng đá mỗi TUYÊN BỐ.

Ngoài ra, các kích tỷ lệ kèo bóng đá có thể được xác định để bắn chocắt ngắn, mặc dù chỉtỷ lệ kèo bóng đá mỗi TUYÊN BỐ.

Bảng sau đây tóm tắt loại kích tỷ lệ kèo bóng đá nào có thể được sử dụng trên các bảng và chế độ xem:

Khi Sự kiện cấp độ hàng cấp độ tuyên bố
trước Chèn/Cập nhật/Xóa Bảng Bảng và chế độ xem
cắt ngắn - Bảng
sau Chèn/Cập nhật/Xóa Bảng Bảng và chế độ xem
cắt ngắn - Bảng
Thay vào đó CỦA Chèn/Cập nhật/Xóa Chế độ xem -
cắt ngắn - -

Ngoài ra, một định nghĩa kích tỷ lệ kèo bóng đá có thể chỉ định booleanKhiĐiều kiện sẽ được kiểm tra để xem liệu Các kích tỷ lệ kèo bóng đá nên được bắn. Trong các kích tỷ lệ kèo bóng đá cấp hàngKhiĐiều kiện có thể kiểm tra các giá trị cũ và/hoặc mới của các cột của hàng. Trình kích tỷ lệ kèo bóng đá cấp câu lệnh cũng có thể cóKhiĐiều kiện, mặc dù tính năng này là không hữu ích tỷ lệ kèo bóng đá họ vì điều kiện không thể đề cập đến bất kỳ giá trị trong bảng.

Nếu nhiều tác nhân cùng loại được xác định tỷ lệ kèo bóng đá cùng một sự kiện, chúng sẽ bị bắn theo thứ tự bảng chữ cái theo tên.

Khiràng buộcTùy chọn là được chỉ định, lệnh này tạo raràng buộc cò súng. Điều này giống như một trình kích tỷ lệ kèo bóng đá thông thường ngoại trừ Thời gian bắn kích tỷ lệ kèo bóng đá có thể được điều chỉnh bằng cách sử dụngĐặt các ràng buộc. Kích tỷ lệ kèo bóng đá ràng buộc Phải làsau hàngTriggers. Họ có thể bị sa thải vào cuối tuyên bố gây ra sự kích tỷ lệ kèo bóng đá sự kiện, hoặc ở cuối giao dịch có chứa; trong cái sau trường hợp họ được cho làTrì hoãn. MỘT đang chờ xử lý kích tỷ lệ kèo bóng đá kích tỷ lệ kèo bóng đá trân trọng cũng có thể bị buộc phải xảy ra ngay lập tức bằng cách sử dụngĐặt các ràng buộc. Các yếu tố kích tỷ lệ kèo bóng đá ràng buộc dự kiến ​​sẽ tăng một ngoại lệ khi Những ràng buộc họ thực hiện bị vi phạm.

ChọnKhông sửa đổi bất kỳ hàng nào để bạn Không thể tạoChọnKích tỷ lệ kèo bóng đá. Quy tắc và Các chế độ xem phù hợp hơn trong các trường hợp như vậy.

Tham khảoChương 36Để biết thêm thông tin về kích tỷ lệ kèo bóng đá.

tham số

tên

Tên để đưa ra trình kích tỷ lệ kèo bóng đá mới. Điều này phải khác biệt với Tên của bất kỳ kích tỷ lệ kèo bóng đá nào khác cho cùng một bảng. Tên không thể là Lược đồ-đủ điều kiện-kích tỷ lệ kèo bóng đá kế thừa lược đồ của bảng của nó. Đối với một kích tỷ lệ kèo bóng đá ràng buộc, đây cũng là tên để sử dụng khi sửa đổi hành vi của bộ kích tỷ lệ kèo bóng đá bằng cách sử dụngĐặt HẠN CHẾ.

trước
sau
thay vì

Xác định xem chức năng được gọi trước, sau, hoặc Thay vì sự kiện. Trình kích tỷ lệ kèo bóng đá ràng buộc chỉ có thể được chỉ định làsau.

Sự kiện

một trong sốChèn, Cập nhật, Xóahoặccắt ngắn; Điều này chỉ định sự kiện đó Sẽ bắn kích tỷ lệ kèo bóng đá. Nhiều sự kiện có thể được chỉ định bằng cách sử dụnghoặc.

tỷ lệ kèo bóng đáCập nhậtSự kiện, có thể Chỉ định danh sách các cột bằng cú pháp này:

Cập nhậtCột_name1[,Cột_name2...]

Trình kích tỷ lệ kèo bóng đá sẽ chỉ bắn nếu ít nhất một trong các cột được liệt kê được đề cập như là mục tiêu củaCập nhậtlệnh.

Thay vì cập nhậtSự kiện không hỗ trợ Danh sách các cột.

Table_Name

Tên (tùy chọn Lược đồ theo trình độ) của bảng hoặc xem Trigger dành tỷ lệ kèo bóng đá.

tham chiếu_table_name

Tên (có thể là trình độ lược đồ) của một bảng khác được tham chiếu bởi ràng buộc. Tùy chọn này được sử dụng cho các ràng buộc của nước ngoài và không được khuyến nghị sử dụng chung. Điều này chỉ có thể được chỉ định cho các kích tỷ lệ kèo bóng đá ràng buộc.

Có thể bảo vệ
Không thể bảo vệ
Ban đầu ngay lập tức
ban đầu được hoãn lại

Thời gian mặc định của kích tỷ lệ kèo bóng đá. XemTạo bảngTài liệu để biết chi tiết của các tùy chọn ràng buộc này. Điều này chỉ có thể được chỉ định cho Kích tỷ lệ kèo bóng đá ràng buộc.

tỷ lệ kèo bóng đá mỗi hàng
tỷ lệ kèo bóng đá mỗi câu

Điều này chỉ định liệu quy trình kích tỷ lệ kèo bóng đá có nên được bắn không một lần cho mỗi hàng bị ảnh hưởng bởi sự kiện kích tỷ lệ kèo bóng đá, hoặc chỉ một lần mỗi Tuyên bố SQL. Nếu không được chỉ định,tỷ lệ kèo bóng đá Mỗi câu lệnhlà mặc định. Kích tỷ lệ kèo bóng đá hạn chế chỉ có thể được chỉ địnhtỷ lệ kèo bóng đá mỗi hàng.

điều kiện

Một biểu thức Boolean xác định xem bộ kích tỷ lệ kèo bóng đá có Chức năng sẽ thực sự được thực hiện. Nếu nhưkhiđược chỉ định, chức năng sẽ chỉ được gọi Nếuđiều kiệnreturnTrue. TRONGtỷ lệ kèo bóng đá mỗi hàngTriggers, TheKhiĐiều kiện có thể tham khảo Các cột của các giá trị hàng cũ và/hoặc hàng mới bằng cách viếtcũ.Cột_namehoặcmới.Cột_nametương ứng. Tất nhiên rồi,ChènTriggers không thể tham khảoXóaTriggers Không thể tham khảomới.

thay vìTriggers không hỗ trợKhiĐiều kiện.

Hiện tại,KhiBiểu thức không thể chứa các nhóm con.

Lưu ý rằng đối với các kích tỷ lệ kèo bóng đá ràng buộc, đánh giákhiĐiều kiện không bị trì hoãn, nhưng xảy ra Ngay sau khi tỷ lệ kèo bóng đá động cập nhật hàng được thực hiện. Nếu Điều kiện không đánh giá đúng thì kích tỷ lệ kèo bóng đá không được xếp hàng để thực hiện trì hoãn.

function_name

Chức năng do người dùng cung cấp được khai báo là không lấy đối số và loại trả vềTrigger, đó là được thực thi khi kích tỷ lệ kèo bóng đá bắn.

Đối số

Một danh sách các đối số được phân tách bằng dấu phẩy tùy chọn sẽ được cung cấp cho Hàm khi kích tỷ lệ kèo bóng đá được thực thi. Các lập luận là Hằng số chuỗi theo nghĩa đen. Tên đơn giản và hằng số số có thể Viết ở đây, nhưng tất cả chúng sẽ được chuyển đổi thành chuỗi. Vui lòng kiểm tra mô tả ngôn ngữ thực hiện của chức năng kích tỷ lệ kèo bóng đá để tìm hiểu làm thế nào các đối số này có thể được truy cập trong chức năng; Nó có thể khác với chức năng bình thường Đối số.

ghi chú

Để tạo trình kích tỷ lệ kèo bóng đá trên bảng, người dùng phải cóTriggerĐặc quyền trên bảng. Người dùng cũng phải cóthực thiĐặc quyền trên chức năng kích tỷ lệ kèo bóng đá.

Sử dụngPostgreSQL: TàiĐể loại bỏ a cò súng.

Trình kích tỷ lệ kèo bóng đá dành riêng cho cột (một được xác định bằng cách sử dụngCập nhậtCột_nameCú pháp) sẽ bắn khi bất kỳ của các cột của nó được liệt kê là mục tiêu trongCập nhậtLệnh củasetDanh sách. Giá trị của một cột có thể thay đổi ngay cả khi trình kích tỷ lệ kèo bóng đá không bị bắn, bởi vì các thay đổi được thực hiện theo nội dung của hàng bởiTrước khi cập nhậtKích tỷ lệ kèo bóng đá không được xem xét. Ngược lại, một lệnh nhưCập nhật ... Đặt x = x ...Sẽ kích tỷ lệ kèo bóng đá trình kích tỷ lệ kèo bóng đá trên cộtX, mặc dù giá trị của cột không thay đổi.

trong AtrướcTrigger, TheKhiĐiều kiện được đánh giá ngay trước chức năng đang hoặc sẽ được thực thi, vì vậy sử dụngKhiIS không khác biệt về mặt vật chất so với việc kiểm tra cùng một điều kiện tại bắt đầu chức năng kích tỷ lệ kèo bóng đá. Lưu ý cụ thể rằngmớiHàng nhìn thấy theo điều kiện là Giá trị hiện tại, như có thể được sửa đổi bởi các kích tỷ lệ kèo bóng đá trước đó. Ngoài ra, AtrướcTrigger'sKhiĐiều kiện không được phép kiểm tra hệ thống các cột củamớihàng (chẳng hạn nhưoid), bởi vì chúng chưa được đặt.

trong mộtsauTrigger, TheKhiĐiều kiện được đánh giá ngay sau hàng Cập nhật xảy ra và nó xác định liệu một sự kiện có được xếp hàng để bắn không Các kích tỷ lệ kèo bóng đá ở cuối tuyên bố. Vì vậy, khi mộtsauTrigger'sKhiĐiều kiện không trả về true, không cần thiết phải xếp hàng Sự kiện cũng như để tìm nạp lại hàng ở cuối tuyên bố. Điều này có thể dẫn đến trong các tốc độ tăng tốc đáng kể trong các câu lệnh sửa đổi nhiều hàng, nếu kích tỷ lệ kèo bóng đá chỉ cần được bắn cho một vài hàng.

Trình kích tỷ lệ kèo bóng đá cấp độ tuyên bố trên chế độ xem chỉ được bắn nếu hành động Trên chế độ xem được xử lý bởi cấp độ hàngThay vào đó CỦATrigger. Nếu hành động được xử lý bởi mộtThay vào đóQuy tắc, sau đó bất kỳ câu nào được phát ra Theo quy tắc được thực thi thay cho việc đặt tên câu lệnh ban đầu Quan điểm, để các yếu tố kích tỷ lệ kèo bóng đá sẽ được bắn là Bảng có tên trong các tuyên bố thay thế. Tương tự, nếu chế độ xem có thể tự động cập nhật, sau đó hành động được xử lý bởi Tự động viết lại câu lệnh thành một hành động trên chế độ xem bảng cơ sở, để các kích tỷ lệ kèo bóng đá cấp độ tuyên bố của bảng cơ sở là những cái được bắn.

inPostgreSQLPhiên bản trước 7.3, cần phải khai báo các chức năng kích tỷ lệ kèo bóng đá là trả lại Loại trình giữ chỗOpaque, chứ không phảiTrigger. Để hỗ trợ tải Dump cũ Tệp,tỷ lệ kèo bóng đásẽ chấp nhận a chức năng được khai báo là trả vềOpaque, nhưng nó sẽ phát hành thông báo và thay đổi loại trả về được khai báo của hàm ĐẾNTrigger.

Ví dụ

thực thi chức năngCheck_account_updateBất cứ khi nào một hàng của bảngTài khoảnsắp được cập nhật:

tỷ lệ kèo bóng đá Check_Update
    Trước khi cập nhật trên tài khoản
    Cho mỗi hàng
    Quy trình thực thi Check_account_update ();

giống nhau, nhưng chỉ thực thi chức năng nếu cộtCân bằngđược chỉ định là mục tiêu trongCập nhậtlệnh:

tỷ lệ kèo bóng đá Check_Update
    Trước khi cập nhật số dư trên tài khoản
    Cho mỗi hàng
    Quy trình thực thi Check_account_update ();

Biểu mẫu này chỉ thực thi chức năng nếu cộtBalanceThực tế đã thay đổi giá trị:

tỷ lệ kèo bóng đá Check_Update
    Trước khi cập nhật trên tài khoản
    Cho mỗi hàng
    Khi (Old.balance khác biệt với New.balance)
    Quy trình thực thi Check_account_update ();

Gọi hàm để đăng nhập cập nhậtTài khoản, nhưng chỉ khi một cái gì đó thay đổi:

Tạo trình kích tỷ lệ kèo bóng đá log_update
    Sau khi cập nhật trên tài khoản
    Cho mỗi hàng
    Khi (cũ.* Khác biệt với mới.*)
    Thực thi quy trình log_account_update ();

thực thi chức năngView_insert_rowĐể mỗi hàng chèn hàng vào các bảng bên dưới chế độ xem:

tỷ lệ kèo bóng đá View_insert
    Thay vì chèn vào my_view
    Cho mỗi hàng
    Thực hiện quy trình xem_insert_row ();

Phần 36.4chứa a Hoàn thành ví dụ về hàm kích tỷ lệ kèo bóng đá được viết trong C.

Tương thích

Thetỷ lệ kèo bóng đácâu lệnh trongPostgreSQLthực hiện một tập hợp con của TheSQLTiêu chuẩn. Sau đây chức năng hiện đang bị thiếu:

  • SQL tỷ lệ kèo bóng đá phép bạn xác định bí danh tỷ lệ kèo bóng đá"cũ""mới"hàng hoặc Các bảng để sử dụng trong định nghĩa của hành động được kích tỷ lệ kèo bóng đá (ví dụ:tỷ lệ kèo bóng đá ... trên Tablename tham khảo cũ Hàng như Somename Hàng mới như tên khác ...). TừPostgreSQLcho phép các quy trình kích tỷ lệ kèo bóng đá được viết bằng bất kỳ số lượng ngôn ngữ do người dùng định nghĩa, truy cập vào dữ liệu được xử lý theo cách cụ thể về ngôn ngữ.

  • PostgreSQLkhông cho phép Các bảng cũ và mới được tham chiếu trong các kích tỷ lệ kèo bóng đá cấp độ tuyên bố, tức là, các bảng chứa tất cả các hàng cũ và/hoặc mới được đề cập bởiBảng cũBảng mớimệnh đề trongSQLtiêu chuẩn.

  • PostgreSQLChỉ cho phép Thực hiện chức năng do người dùng xác định cho hành động được kích tỷ lệ kèo bóng đá. Các Tiêu chuẩn cho phép thực hiện một số lệnh SQL khác, chẳng hạn nhưTạo bảng, như được kích tỷ lệ kèo bóng đá tỷ lệ kèo bóng đá động. Hạn chế này không khó để làm việc xung quanh bằng cách tạo ra một chức năng do người dùng xác định thực thi các lệnh mong muốn.

SQL chỉ định rằng nhiều kích tỷ lệ kèo bóng đá nên được bắn vào Thứ tự thời gian sáng tạo.PostgreSQLsử dụng thứ tự tên, được đánh giá là thuận tiện hơn.

SQL Chỉ định rằngTrước khi xóaTrình kích tỷ lệ kèo bóng đá trên Cascaded Deletes FiresauCascadedXóaHoàn thành. ThePostgreSQLHành vi dành tỷ lệ kèo bóng đáTrước khi xóaLuôn luôn bắn trước khi xóa hành động, thậm chí là một tầng. Điều này được coi là nhất quán hơn. Ngoài ra còn có hành vi không chuẩn nếutrướcTrình kích tỷ lệ kèo bóng đá sửa đổi hàng hoặc ngăn chặn cập nhật Trong một bản cập nhật được gây ra bởi một hành động tham chiếu. Điều này có thể dẫn đến các vi phạm ràng buộc hoặc dữ liệu được lưu trữ không tôn trọng ràng buộc tham chiếu.

Khả năng chỉ định nhiều hành động cho một kích tỷ lệ kèo bóng đá duy nhất sử dụnghoặclà mộtPostgreSQLPhần mở rộng của tiêu chuẩn SQL.

Khả năng kích tỷ lệ kèo bóng đá kích tỷ lệ kèo bóng đá chocắt ngắnlà mộtPostgreSQLMở rộng tiêu chuẩn SQL, AS là khả năng xác định các kích tỷ lệ kèo bóng đá cấp câu lệnh trên chế độ xem.

Tạo Kích tỷ lệ kèo bóng đá ràng buộclà mộtPostgreSQLPhần mở rộng củaSQLtiêu chuẩn.