Re: trigger/rule question

From: "Ramakrishnan Muralidharan" <ramakrishnanm(at)pervasive-postgres(dot)com>
To: <weigelt(at)metux(dot)de>, "pgsql-sql" <pgsql-sql(at)postgresql(dot)org>
Subject: Re: trigger/rule question
Date: 2005-05-02 04:49:17
Message-ID: 02767D4600E59A4487233B23AEF5C5992A4081@blrmail1.aus.pervasive.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

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: pgsql-sql-owner(at)postgresql(dot)org
[mailto:pgsql-sql-owner(at)postgresql(dot)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(at)pervasive-postgres(dot)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: +49 36207 519931 www: http://www.metux.de/
fax: +49 36207 519932 email: contact(at)metux(dot)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

Browse pgsql-sql by date

  From Date Subject
Next Message Ramakrishnan Muralidharan 2005-05-02 05:00:45 Re: can someone jelp me on this?
Previous Message Leo Fink 2005-05-02 04:26:28 Re: Array of Arrays of int