PostgreSQL Trình kích hoạt: Tạo, liệt kê và thả kèm ví dụ
Kích hoạt là gì PostgreSQL?
A PostgreSQL Cò súng là một chức năng đượ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ụ, một cái bàn. Ví dụ về các sự kiện cơ sở dữ liệu có thể kích hoạt trình kích hoạt bao gồm CHÈN, CẬP NHẬT, XÓA, v.v. Ngoài ra, khi bạn tạo trình kích hoạt cho một bảng, trình kích hoạt sẽ tự động bị loại bỏ khi bảng đó bị xóa.
Cách sử dụng Trigger trong PostgreSQL?
Một trình kích hoạt có thể được đánh dấu bằng toán tử FOR EACH ROW trong quá trình tạo nó. Trình kích hoạt 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 trình kích hoạt cũng có thể được đánh dấu bằng toán tử FOR EACH STATEMENT trong quá trình tạo nó. Trình kích hoạt 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.
Bây giờ chúng ta đã có hàm kích hoạt, chúng ta nên liên kết nó với bảng Giá của mình. Chúng tôi sẽ đặt tên cho trình kích hoạt là price_trigger. Trước khi tạo bản ghi mới, hàm kích hoạt sẽ được gọi tự động để ghi lại các thay đổi. Đây là 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);
Bây giờ chúng ta đã chèn một bản ghi vào bảng Price, một bản ghi cũng sẽ được chèn vào bảng Price_Audit. Điều này là kết quả của trình kích hoạt mà chúng tôi đã tạo trên bảng Giá. Hãy để chúng tôi 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.
Trình kích hoạt danh sách Postgres
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.
Trình kích hoạt thả Postgres
Để thả 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 trên bảng Price, chúng ta chạy lệnh sau:
Để 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ờ hãy xem cả ba hành động được thực hiện như thế nào 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 trình kích hoạt trong Postgres bằ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 của bạn
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 chỉnh sửa:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Bước 4) Thực hiện truy vấn
Bấm vào nút Thực hiện
Bước 5) Chạy mã 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 trigger
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:
Loại bỏ trình 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ổng kết
- A PostgreSQL trigger đề cập đến 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, chẳng hạn như bảng.
- Ví dụ về các sự kiện cơ sở dữ liệu như vậy bao gồm CHÈN, CẬP NHẬT, XÓA, v.v.
- Trình kích hoạt chỉ tồn tại trong suốt thời gian tồn tại của đối tượng cơ sở dữ liệu mà nó được tạo.
- Nếu đối tượng cơ sở dữ liệu bị xóa thì trigger cũng sẽ bị xóa.
- PostgreSQL các trigger được tạo bằng cách sử dụng câu lệnh CREATE TRIGGER.
- Mỗi trình kích hoạt được liên kết với một chức năng cho biết trình kích hoạt sẽ làm gì khi nó được gọi.
Tải xuống Cơ sở dữ liệu được sử dụng trong Hướng dẫn này