Re: plpgsql before insert update delete

From: Ian Barwick <barwick(at)gmx(dot)net>
To: "kiyo taka" <hihajime(at)hotmail(dot)com>, pgsql-sql(at)postgresql(dot)org
Subject: Re: plpgsql before insert update delete
Date: 2001-12-08 03:01:00
Message-ID: 200112080359.EAA28586@post.webmailer.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Wednesday 05 December 2001 06:47, kiyo taka wrote:
> hi all.
>
> i'd like to noe how to create trigger which will insert tablez old data
> into an archive table before any(insert,update,delete) operation is
> executed.
>
> i've tried "if inserting ...." but it didnt work.
> is there any function that will do it?

Assuming an example table thus:
CREATE TABLE mytable(id INTEGER, whatever VARCHAR(16));

and an identical archive table:
CREATE TABLE mytable_archive(id INTEGER, whatever VARCHAR(16));

you can create the following function and trigger for that
table:

DROP FUNCTION mytable_archive_proc();
CREATE FUNCTION mytable_archive_proc()
RETURNS opaque
AS '
BEGIN
IF TG_OP = ''DELETE''
THEN INSERT INTO mytable_archive VALUES(old.id, old.whatever);
RETURN old;
ELSE INSERT INTO mytable_archive VALUES(new.id, new.whatever);
END IF;
RETURN new;
END;'
LANGUAGE 'plpgsql';

DROP TRIGGER mytable_archive_trigger ON mytable;
CREATE TRIGGER mytable_archive_trigger
BEFORE INSERT OR UPDATE OR DELETE
ON mytable
FOR EACH ROW
EXECUTE PROCEDURE mytable_archive_proc();

Which should write all changes in "mytable" to "mytable_archive".

> any help will be greatly appreciated.
>
> thanx.

Dou itashimashite

Ian Barwick

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Dominic Da Silva 2001-12-09 20:29:24 Poolman/mySQL transaction exception on connect
Previous Message Ligia Pimentel 2001-12-07 22:06:02 How to rename a database?