Thread: trigger on table

trigger on table

From
"Graham Vickrage"
Date:
I am trying to create a trigger on a table that simply sets the last_updated
field when any updates are made to that table.

I have tried the following: -

CREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS '
BEGIN
UPDATE item SET last_updated = now();
RETURN OLD;
END;' LANGUAGE 'plpgsql';

CREATE TRIGGER item_last_updated AFTER UPDATE ON item
FOR EACH ROW EXECUTE PROCEDURE set_item_last_updated();

When I try to execute this it hangs and postmaster eventually runs out of
memory.

Is there a way to do it just using sql not plpsql?
Why is it hanging?

Thank in advance.

Graham




Re: trigger on table

From
"PGExplorer"
Date:
TryCREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS 'BEGINNEW.last_updated = now();RETURN NEW;END;'LANGUAGE
'plpgsql';
CREATE TRIGGER item_last_updated BEFORE UPDATE ON itemFOR EACH ROW EXECUTE PROCEDURE set_item_last_updated();

Make sure its BEFORE...

Hope this helps


http://www.pgexplorer.com
GUI Tool for Postgres

----- Original Message -----
From: "Graham Vickrage" <graham@digitalplanit.com>
To: "Postgres SQL" <pgsql-sql@postgresql.org>
Sent: Thursday, February 14, 2002 2:17 PM
Subject: [SQL] trigger on table


> I am trying to create a trigger on a table that simply sets the
last_updated
> field when any updates are made to that table.
>
> I have tried the following: -
>
> CREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS '
> BEGIN
> UPDATE item SET last_updated = now();
> RETURN OLD;
> END;' LANGUAGE 'plpgsql';
>
> CREATE TRIGGER item_last_updated AFTER UPDATE ON item
> FOR EACH ROW EXECUTE PROCEDURE set_item_last_updated();
>
> When I try to execute this it hangs and postmaster eventually runs out of
> memory.
>
> Is there a way to do it just using sql not plpsql?
> Why is it hanging?
>
> Thank in advance.
>
> Graham
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>



Re: trigger on table

From
Karel Zak
Date:
On Thu, Feb 14, 2002 at 12:17:02PM -0000, Graham Vickrage wrote:
> I am trying to create a trigger on a table that simply sets the last_updated
> field when any updates are made to that table.
> 
> I have tried the following: -
> 
> CREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS '
> BEGIN
> UPDATE item SET last_updated = now(); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> RETURN OLD;
> END;' LANGUAGE 'plpgsql';
> 
> CREATE TRIGGER item_last_updated AFTER UPDATE ON item                                 ^^^^^^^
> FOR EACH ROW EXECUTE PROCEDURE set_item_last_updated();
> 
> When I try to execute this it hangs and postmaster eventually runs out of
> memory.
You create trigger on update and inside this trigger you do update 
again. It's cycle...
> Is there a way to do it just using sql not plpsql?
It works with PL/SQL, try:
CREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS '       BEGIN               NEW.last_updated := ''now'';
         RETURN NEW;       END;
 
' LANGUAGE 'plpgsql';
CREATE TRIGGER item_last_updated BEFORE UPDATE ON itemFOR EACH ROW EXECUTE PROCEDURE set_item_last_updated ();
       Karel

-- Karel Zak  <zakkr@zf.jcu.cz>http://home.zf.jcu.cz/~zakkr/C, PostgreSQL, PHP, WWW, http://docs.linux.cz,
http://mape.jcu.cz


Re: trigger on table

From
"Christopher Kings-Lynne"
Date:
> > I have tried the following: -
> >
> > CREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS '
> > BEGIN
> > UPDATE item SET last_updated = now();
>   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > RETURN OLD;
> > END;' LANGUAGE 'plpgsql';

Even better I guess, if you are running 7.1 or greater, use
CURRENT_TIMESTAMP instead of now()?

Chris



Re: trigger on table

From
"Hano de la Rouviere"
Date:
TryCREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS 'BEGINNEW.last_updated = now();RETURN NEW;END;'LANGUAGE
'plpgsql';
CREATE TRIGGER item_last_updated BEFORE UPDATE ON itemFOR EACH ROW EXECUTE PROCEDURE set_item_last_updated();

Make sure its BEFORE...

Hope this helps


http://www.pgexplorer.com
GUI Tool for Postgres

----- Original Message -----
From: "Graham Vickrage" <graham@digitalplanit.com>
To: "Postgres SQL" <pgsql-sql@postgresql.org>
Sent: Thursday, February 14, 2002 2:17 PM
Subject: [SQL] trigger on table


> I am trying to create a trigger on a table that simply sets the
last_updated
> field when any updates are made to that table.
>
> I have tried the following: -
>
> CREATE FUNCTION set_item_last_updated () RETURNS OPAQUE AS '
> BEGIN
> UPDATE item SET last_updated = now();
> RETURN OLD;
> END;' LANGUAGE 'plpgsql';
>
> CREATE TRIGGER item_last_updated AFTER UPDATE ON item
> FOR EACH ROW EXECUTE PROCEDURE set_item_last_updated();
>
> When I try to execute this it hangs and postmaster eventually runs out of
> memory.
>
> Is there a way to do it just using sql not plpsql?
> Why is it hanging?
>
> Thank in advance.
>
> Graham
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>