Hi,
  
  I have written the following trigger assuming the application can pass NULL 
value on mtime and it can be handled on the 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: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of Enrico Weigelt
Sent: Monday, May 02, 2005 9:02 AM
To: pgsql-sql
Subject: Re: [SQL] trigger/rule question


* Ramakrishnan Muralidharan <[EMAIL PROTECTED]> 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:     +49 36207 519931         www:       http://www.metux.de/
  fax:       +49 36207 519932         email:     [EMAIL PROTECTED]
---------------------------------------------------------------------
  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

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to