Trình kích hoạt Postgresql là gì?
Trình kích hoạt PostgreSQL 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. Hơn nữa, 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.
Trong Hướng dẫn PostgreSQL này, bạn sẽ tìm hiểu những điều sau:
- Trình kích hoạt Postgresql là gì?
- Cách sử dụng Trigger trong POSRGREQL?
- Tạo một trình kích hoạt
- Sử dụng pgAdmin
- Giảm kích hoạt
Cách sử dụng Trigger trong POSRGREQL?
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. Một 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 hoạt động. Một trình kích hoạt cũng có thể được đánh dấu bằng toán tử CHO TỪNG BÁO CÁO trong quá trình tạo. Trình kích hoạt này sẽ chỉ được thực hiện một lần cho một hoạt động cụ thể.
Tạo một trình kích hoạt
Để tạo một trình kích hoạt, chúng tôi sử dụng chức năng CREATE TRIGGER. Đây là cú pháp của hàm:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Tên trình kích hoạt là tên của trình kích hoạt.
BEFORE, AFTER và INSTEAD OF là các từ khóa xác định khi nào trình kích hoạt sẽ được gọi.
Tên sự kiện là tên của sự kiện sẽ khiến trình kích hoạt được gọi. Đ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à trình kích hoạt sẽ được tạo.
Nếu trình kích hoạt được tạo cho hoạt động INSERT, chúng ta phải thêm tham số tên cột BẬT.
Cú pháp sau minh họa điều này:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Ví dụ:
Chúng tôi sẽ sử dụng Bảng giá được đưa ra dưới đây:
Giá bán:
Hãy để chúng tôi tạo một bảng khác, Price_Audits, nơi chúng tôi sẽ ghi lại các 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ể xác định một hàm mới có tên là Auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT 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 bản ghi được tạo.
Bây giờ chúng ta đã có chức năng kích hoạt, chúng ta nên liên kết nó với bảng Giá của chúng ta. Chúng tôi sẽ đặt tên cho trình kích hoạt là price_trigger. Trước khi một bản ghi mới được tạo, chức năng kích hoạt sẽ tự động được gọi để ghi nhật ký các thay đổi. Đây là trình kích hoạt:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Hãy để chúng tôi chèn một bản ghi mới vào bảng Giá:
INSERT INTO PriceVALUES (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. Đây sẽ 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;
Điều này sẽ trả về như sau:
Trình kích hoạt đã hoạt động thành công.
Trình kích hoạt danh sách
Tất cả cá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 các trình kích hoạt mà bạn có trên cơ sở dữ liệu, hãy truy vấn bảng bằng cách chạy lệnh SELECT như được hiển thị bên dưới:
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.
Giảm kích hoạt
Để thả trình kích hoạt PostgreSQL, chúng tôi sử dụng câu lệnh DROP TRIGGER với cú pháp sau:
DROP TRIGGER [IF EXISTS] trigger-nameON 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à từ đó trình kích hoạt sẽ bị xóa.
Mệnh đề IF EXISTS cố gắng xóa một trình kích hoạt 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 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 RESTRICT, 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 Giá, chúng tôi chạy lệnh sau:
Để thả trình kích hoạt có tên example_trigger trên bảng Công ty, hãy chạy lệnh sau:
DROP TRIGGER example_trigger IF EXISTSON Company;
Sử dụng pgAdmin
Bây giờ chúng ta hãy xem cách cả ba hành động được thực hiện bằng cách sử dụng pgAdmin.
Tạo trình kích hoạt
Để thực hiện điều tương tự thông qua pgAdmin, hãy làm như sau:
Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn.
Bước 2)
- Từ thanh điều hướng bên trái - Nhấp vào Cơ sở dữ liệu.
- Nhấp vào Demo.
Bước 3) Để tạo bảng Price_Audits, hãy nhập trình chỉnh sửa truy vấn:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Bước 4) Nhấp vào nút Thực thi.
Bước 5) Chạy đoạn mã sau để xác định hàm kiểm toán:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
Bước 6) Chạy mã sau để tạo trình kích hoạt price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Bước 7)
- Chạy lệnh sau để chèn một bản ghi mới vào bảng Giá:
INSERT INTO PriceVALUES (3, 400)
- Chạy lệnh sau để kiểm tra xem bản ghi đã được chèn vào bảng Price_Audits hay chưa:
SELECT * FROM Price_Audits
Điều này sẽ trả về như sau:
Bước 8) Hãy để chúng tôi kiểm tra nội dung của bảng Price_Audits:
Trình kích hoạt danh sách
Bước 1) Chạy lệnh sau để kiểm tra các trình 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:
Giảm kích hoạt
Để thả trình kích hoạt có tên example_trigger trên bảng Công ty, hãy chạy lệnh sau:
DROP TRIGGER example_trigger IF EXISTSON Company
Tóm lược:
- Trình kích hoạt PostgreSQL đề cập đến một chức năng được kích hoạt tự động khi 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.
- Một 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, trình kích hoạt cũng sẽ bị xóa.
- Các trình kích hoạt PostgreSQL đượ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 hàm nêu rõ 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