Re: trigger/rule question - Mailing list pgsql-sql
From | Ramakrishnan Muralidharan |
---|---|
Subject | Re: trigger/rule question |
Date | |
Msg-id | 02767D4600E59A4487233B23AEF5C5992A4081@blrmail1.aus.pervasive.com Whole thread Raw |
In response to | trigger/rule question (Enrico Weigelt <weigelt@metux.de>) |
List | pgsql-sql |
Hi, I have written the following trigger assuming the application can pass NULL value on mtime and it can be handled onthe server side by the trigger. CREATE TABLE TEST3 ( ID INT4 NOT NULL, DDATE TIMESTAMP ) CREATE OR REPLACE FUNCTION Updatemtime() RETURNS TRIGGER AS $Updatemtime$ DECLARE dDate timestamp; BEGIN dDate = 'now'; IF COALESCE(NEW.DDATE , dDate ) = dDate THEN NEW.DDATE = dDate; END IF; RETURN NEW; END; $Updatemtime$ LANGUAGE 'plpgsql'; CREATE TRIGGER Updatemtime BEFORE INSERT ON TEST3 FOR EACH ROW EXECUTE PROCEDURE Updatemtime(); INSERT INTO TEST3 VALUES( 1 , NULL ); INSERT INTO TEST3 VALUES( 2 , '2005-05-01'); select * from TEST3 I will continue work on this and let you know if I can find another better solution for this issue. Regards, R.Muralidharan -----Original Message----- From: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-owner@postgresql.org]On Behalf Of Enrico Weigelt Sent: Monday, May 02, 2005 9:02 AM To: pgsql-sql Subject: Re: [SQL] trigger/rule question * Ramakrishnan Muralidharan <ramakrishnanm@pervasive-postgres.com> wrote: Hi, > Going through you mail, I assume that you are updating the mtime > only after inserting the record. An "normal" update (=done by an application or user) should also update the mtime. But there's an replication subsystem, which writes should go through untouched. > It is always possible to check the mtime filed value of the inserted > record and take action based on it in the trigger. yeah, but how to detect whether the application has explicitly written it ? The only chance I currently have in mind is to use some session dependent data, i.e. username or some persistant storage (could be easily done ie. w/ plphp) for this decision. The sync subsystem has to do some "special" login (ie. separate user or setting the session wide variable) before doing its work. I would be happier to let a rule do this, so there's not an extra function per written row. But all my experiments ran into infinite recoursion trouble. > Is it possible to send me detail about the trigger? The trigger isn't existing yet. I'm currently maintaining the mtime updates within the application, but I wanna get away from that. It probably would be interesting, if a normal application couldn't touch the mtime at all. cu -- ---------------------------------------------------------------------Enrico Weigelt == metux IT service phone: +4936207 519931 www: http://www.metux.de/ fax: +49 36207 519932 email: contact@metux.de --------------------------------------------------------------------- Realtime Forex/Stock Exchange trading powered by postgresSQL:)) http://www.fxignal.net/ --------------------------------------------------------------------- ---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives? http://archives.postgresql.org