Trong PostgreSQL, trigger là một cơ chế cho phép thực thi một hàm (function) tự động khi có các sự kiện cụ thể xảy ra trong một bảng, chẳng hạn như INSERT, UPDATE, hoặc DELETE. Dưới đây là hướng dẫn từng bước để thiết lập trigger, bao gồm cả ví dụ cơ bản và nâng cao.
Trước tiên, bạn cần tạo một hàm sẽ được gọi khi trigger kích hoạt. Hàm này thường trả về kiểu TRIGGER
.
CREATE OR REPLACE FUNCTION log_insert() RETURNS TRIGGER AS $$ BEGIN INSERT INTO log_table (action, log_time) VALUES ('Inserted', NOW()); RETURN NEW; -- Trả về bản ghi mới END; $$ LANGUAGE plpgsql;
Sau khi đã có hàm, bạn cần tạo trigger và chỉ định hàm nào sẽ được gọi khi trigger kích hoạt.
CREATE TRIGGER after_insert_trigger AFTER INSERT ON your_table -- Tên bảng mà bạn muốn gán trigger FOR EACH ROW EXECUTE FUNCTION log_insert();
Giả sử bạn có một bảng employees
và bạn muốn ghi lại các hành động chèn mới vào một bảng log_table
.
CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), position VARCHAR(100) ); CREATE TABLE log_table ( id SERIAL PRIMARY KEY, action VARCHAR(50), log_time TIMESTAMP );
CREATE OR REPLACE FUNCTION log_insert() RETURNS TRIGGER AS $$ BEGIN INSERT INTO log_table (action, log_time) VALUES ('Inserted employee: ' || NEW.name, NOW()); RETURN NEW; END; $$ LANGUAGE plpgsql;
CREATE TRIGGER after_employee_insert AFTER INSERT ON employees FOR EACH ROW EXECUTE FUNCTION log_insert();
employees
INSERT INTO employees (name, position) VALUES ('Alice', 'Developer'); INSERT INTO employees (name, position) VALUES ('Bob', 'Manager');
log_table
SELECT * FROM log_table;
Bạn có thể tạo trigger cho nhiều sự kiện khác nhau, chẳng hạn như cập nhật và xóa.
CREATE OR REPLACE FUNCTION log_update_delete() RETURNS TRIGGER AS $$ BEGIN IF TG_OP = 'UPDATE' THEN INSERT INTO log_table (action, log_time) VALUES ('Updated employee: ' || NEW.name, NOW()); ELSIF TG_OP = 'DELETE' THEN INSERT INTO log_table (action, log_time) VALUES ('Deleted employee: ' || OLD.name, NOW()); END IF; RETURN NEW; -- Đối với UPDATE, trả về NEW; Đối với DELETE, trả về OLD END; $$ LANGUAGE plpgsql;
CREATE TRIGGER after_employee_update_delete AFTER UPDATE OR DELETE ON employees FOR EACH ROW EXECUTE FUNCTION log_update_delete();
Giờ đây, khi bạn cập nhật hoặc xóa một bản ghi trong bảng employees
, trigger sẽ tự động ghi lại hành động đó vào bảng log_table
.
UPDATE employees SET position = 'Senior Developer' WHERE name = 'Alice'; DELETE FROM employees WHERE name = 'Bob';
SELECT * FROM log_table;
Trigger là công cụ mạnh mẽ để tự động hóa quy trình và theo dõi hành động trên cơ sở dữ liệu, giúp bạn duy trì tính toàn vẹn dữ liệu và ghi lại lịch sử thay đổi.