Can I create a trigger to add another record based on the inserted record in the same table?

From: Mohd Shaiza Ibrahim <mohdshaiza(at)gmail(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Can I create a trigger to add another record based on the inserted record in the same table?
Date: 2012-07-18 00:59:56
Message-ID: CACOE1QyYrA8JFqWA62q=u4s3dCqq=DYFLvmnCiCTzLdM=70TEA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

Can you guys please help me? My question sounds like this.

When I insert a new record in a table, can I create a trigger to add
another record based on the inserted record in the same table?

For example,

INSERT INTO employee (emp_id, emp_name) VALUES (0001, 'Jack');

The result:

Select * from employee;

emp_id | emp_name
0001 | Jack
0002 | Bob

I've tried running the statement below but it doesn't work. Infinite
loop i'm guessing.

--CREATE FUNCTION AS .. RETURNS TRIGGER
CREATE OR REPLACE FUNCTION add_employee_trg()
RETURNS trigger AS
$BODY$ DECLARE

BEGIN

--DELETE STATEMENT
IF tg_op = 'DELETE' THEN
INSERT INTO employee_bak(emp_id, emp_name, emp_operation)
VALUES (old.emp_id, old.emp_name, tg_op);
RETURN old;
END IF;

--INSERT STATEMENT
IF tg_op = 'INSERT' THEN
INSERT INTO employee_bak(emp_id, emp_name, emp_operation)
VALUES (new.emp_id, new.emp_name, tg_op);
RETURN new;
END IF;

--UPDATE STATEMENT
IF tg_op = 'UPDATE' THEN
INSERT INTO employee_bak(emp_id, emp_name, emp_operation)
VALUES (old.emp_id, new.emp_name, tg_op);
RETURN new;
END IF;

END

; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION add_employee_trg()
OWNER TO postgres;

Any help or guide would really be appreciated.

Thanks.

Shai
--
Mohd Shaiza Ibrahim

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Scott Bailey 2012-07-18 01:19:52 Chicken/egg problem with range types
Previous Message Scott Bailey 2012-07-17 23:41:15 Chicken/egg problem with range types