Last active
August 31, 2016 14:25
-
-
Save aaizemberg/fed906934934058cc106fc65e17f2412 to your computer and use it in GitHub Desktop.
Triggers en Postgresql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DROP TABLE IF EXISTS emp CASCADE; | |
DROP TABLE IF EXISTS emp_audit; | |
DROP FUNCTION IF EXISTS update_emp_view(); | |
DROP FUNCTION IF EXISTS process_emp_audit(); | |
CREATE TABLE emp ( | |
empname text NOT NULL, | |
salary integer | |
); | |
CREATE TABLE emp_audit( | |
operation char(1) NOT NULL, | |
stamp timestamp NOT NULL, | |
userid text NOT NULL, | |
empname text NOT NULL, | |
salary integer | |
); | |
CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$ | |
BEGIN | |
IF (TG_OP = 'DELETE') THEN | |
INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; | |
RETURN OLD; | |
ELSIF (TG_OP = 'UPDATE') THEN | |
INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*; | |
RETURN NEW; | |
ELSIF (TG_OP = 'INSERT') THEN | |
INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*; | |
RETURN NEW; | |
END IF; | |
RETURN NULL; -- result is ignored since this is an AFTER trigger | |
END; | |
$emp_audit$ LANGUAGE plpgsql; | |
CREATE TRIGGER emp_audit | |
AFTER INSERT OR UPDATE OR DELETE ON emp | |
FOR EACH ROW EXECUTE PROCEDURE process_emp_audit(); | |
INSERT INTO emp VALUES ('Juan',100); | |
INSERT INTO emp VALUES ('Marcos',110); | |
SELECT * FROM emp_audit; | |
UPDATE emp SET salary = salary * 1.2; | |
SELECT * FROM emp_audit; | |
DELETE FROM emp; | |
SELECT * FROM emp_audit; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment