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


pgsql-sql by date:

Previous
From: Mauro Bertoli
Date:
Subject: Re: PHP postgres connections
Next
From: "Ramakrishnan Muralidharan"
Date:
Subject: Re: select within aggregate?