PostgreSQL Trình kích hoạt: Tạo, liệt kê và thả kèm ví dụ
⚡ Tóm tắt thông minh
PostgreSQL Trigger là các hàm tự động chạy khi sự kiện INSERT, UPDATE hoặc DELETE xảy ra trên một bảng, cho phép cơ sở dữ liệu thực thi các quy tắc, ghi nhật ký thay đổi và kiểm tra dữ liệu mà không cần thêm mã ứng dụng.

Kích hoạt là gì PostgreSQL?
A PostgreSQL Cò súng Trigger là một hàm được kích hoạt tự động khi một sự kiện cơ sở dữ liệu xảy ra trên một đối tượng cơ sở dữ liệu, ví dụ như một bảng. Ví dụ về các sự kiện cơ sở dữ liệu có thể kích hoạt trigger bao gồm INSERT, UPDATE, DELETE, v.v. Hơn nữa, khi bạn tạo trigger cho một bảng, trigger sẽ tự động bị xóa khi bảng đó bị xóa.
Cách sử dụng Trigger trong PostgreSQL?
Một trigger có thể được đánh dấu bằng toán tử FOR EACH ROW khi tạo. Trigger như vậy sẽ được gọi một lần cho mỗi hàng được sửa đổi bởi thao tác. Một trigger cũng có thể được đánh dấu bằng toán tử FOR EACH STATEMENT khi tạo. Trigger này sẽ chỉ được thực thi một lần cho một thao tác cụ thể.
PostgreSQL Tạo Trigger
Để tạo trigger, chúng ta sử dụng hàm CREATE TRIGGER. Đây là cú pháp của hàm:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Tên trình kích hoạt là tên của trình kích hoạt.
TRƯỚC, SAU và INSTEAD OF là các từ khóa xác định thời điểm kích hoạt sẽ được gọi.
Tên sự kiện là tên của sự kiện sẽ kích hoạt trình kích hoạt. Điều này có thể là CHÈN, CẬP NHẬT, XÓA, v.v.
Tên bảng là tên của bảng mà trigger sẽ được tạo trên đó.
Nếu trình kích hoạt được tạo cho thao tác INSERT, chúng ta phải thêm tham số tên cột BẬT.
Cú pháp sau đây minh họa điều này:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Tạo ví dụ kích hoạt
Chúng tôi sẽ sử dụng bảng Giá được đưa ra dưới đây:
Giá:
Chúng ta hãy tạo một bảng khác, Price_Audits, nơi chúng ta sẽ ghi lại những thay đổi được thực hiện đối với bảng Giá:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Bây giờ chúng ta có thể định nghĩa một hàm mới có tên là Auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
Hàm trên sẽ chèn một bản ghi vào bảng Price_Audits bao gồm id hàng mới và thời gian tạo bản ghi.
Giờ chúng ta đã có hàm kích hoạt, chúng ta cần liên kết nó với bảng Giá. Chúng ta sẽ đặt tên cho hàm kích hoạt là price_trigger. Trước khi một bản ghi mới được tạo, hàm kích hoạt sẽ được tự động gọi để ghi lại các thay đổi. Đây là hàm kích hoạt:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Chúng ta chèn một bản ghi mới vào bảng Price:
INSERT INTO Price VALUES (3, 400);
Giờ đây, vì chúng ta đã chèn một bản ghi vào bảng Price, một bản ghi khác cũng sẽ được chèn vào bảng Price_Audits do trigger mà chúng ta đã tạo. Hãy cùng kiểm tra điều này:
SELECT * FROM Price_Audits;
Kết quả trả về sẽ như sau:
Trình kích hoạt đã hoạt động thành công.
PostgreSQL Kích hoạt danh sách
Tất cả trình kích hoạt mà bạn tạo trong PostgreSQL được lưu trữ trong bảng pg_trigger. Để xem danh sách trình kích hoạt mà bạn có trên cơ sở dữ liệu, truy vấn bảng bằng cách chạy lệnh SELECT như dưới đây:
SELECT tgname FROM pg_trigger;
Điều này trả về như sau:
Cột tgname của bảng pg_trigger biểu thị tên của trình kích hoạt.
PostgreSQL Cò súng thả
Khi không còn cần đến một trình kích hoạt nữa, bạn có thể gỡ bỏ nó dễ dàng. Để gỡ bỏ một PostgreSQL trigger, chúng ta sử dụng câu lệnh DROP TRIGGER với cú pháp sau:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
Tham số tên trình kích hoạt biểu thị tên của trình kích hoạt sẽ bị xóa.
Tên bảng biểu thị tên của bảng mà trình kích hoạt sẽ bị xóa.
Mệnh đề IF EXISTS cố gắng xóa một trigger tồn tại. Nếu bạn cố gắng xóa một trình kích hoạt không tồn tại mà không sử dụng mệnh đề IF EXISTS, bạn sẽ gặp lỗi.
Tùy chọn CASCADE sẽ giúp bạn tự động loại bỏ tất cả các đối tượng phụ thuộc vào trình kích hoạt.
Nếu bạn sử dụng tùy chọn GIỚI HẠN, trình kích hoạt sẽ không bị xóa nếu các đối tượng phụ thuộc vào nó.
Ví dụ:
Để xóa trình kích hoạt có tên example_trigger khỏi bảng Company, hãy chạy lệnh sau:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
Sử dụng pgAdmin
Bây giờ chúng ta hãy xem cách thực hiện cả ba thao tác này bằng pgAdmin.
Cách tạo trình kích hoạt trong PostgreSQL sử dụng pgAdmin
Đây là cách bạn có thể tạo một trình kích hoạt trong PostgreSQL sử dụng pgAdmin:
Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn
Mở pgAdmin và đăng nhập vào tài khoản của bạn bằng thông tin đăng nhập.
Bước 2) Tạo cơ sở dữ liệu demo
- Từ thanh điều hướng ở bên trái, nhấp vào Cơ sở dữ liệu.
- Nhấp vào Bản trình diễn.
Bước 3) Nhập truy vấn
Để tạo bảng Price_Audits, hãy nhập truy vấn vào trình soạn thảo:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Bước 4) Thực hiện truy vấn
Nhấp vào nút Thực hiện.
Bước 5) Chạy Code cho auditfunc
Chạy mã sau để xác định hàm auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql
Bước 6) Chạy Code để tạo trình kích hoạt
Chạy mã sau để tạo giá trị kích hoạt price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Bước 7) Chèn bản ghi mới
- Chạy lệnh sau để chèn bản ghi mới vào bảng Giá:
INSERT INTO Price VALUES (3, 400)
- Chạy lệnh sau để kiểm tra xem bản ghi có được chèn vào bảng Price_Audits hay không:
SELECT * FROM Price_Audits
Điều này sẽ trả về như sau:
Bước 8) Kiểm tra nội dung bảng
Chúng ta hãy kiểm tra nội dung của bảng Price_Audits.
Trình kích hoạt danh sách bằng pgAdmin
Bước 1) Chạy lệnh sau để kiểm tra các kích hoạt trong cơ sở dữ liệu của bạn:
SELECT tgname FROM pg_trigger
Điều này trả về như sau:
Rơiping Kích hoạt bằng pgAdmin
Để xóa trình kích hoạt có tên example_trigger khỏi bảng Company, hãy chạy lệnh sau:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Tải xuống Cơ sở dữ liệu được sử dụng trong Hướng dẫn này







