Re: Creating Functions & Triggers

Поиск
Список
Период
Сортировка
От joseph speigle
Тема Re: Creating Functions & Triggers
Дата
Msg-id 20040321180530.GA18007@www.sirfsup.com
обсуждение исходный текст
Ответ на Re: Creating Functions & Triggers  (Kevin Lohka <klohka@aboutfacedata.ab.ca>)
Список pgsql-novice
On Sun, Mar 21, 2004 at 10:21:57AM -0700, Kevin Lohka wrote:
> Thanks for the help Tom & Markus I've got it now.
so did I so here is my version:

drop table email;
drop trigger email_mod_date;
drop function email_mod_date();
create table email (
id serial not null primary key,
email character varying(100),
name character varying(100),
m_date date,
m_by_user character varying(100));

 CREATE FUNCTION email_mod_date() RETURNS OPAQUE AS '
    BEGIN
          new.m_date = current_date;
        new.m_by_user = current_user;
        RETURN new;
    END;
 'LANGUAGE 'plpgsql';



 CREATE TRIGGER email_mod_date_trigger
 BEFORE UPDATE
 ON email
 FOR EACH ROW
 EXECUTE PROCEDURE email_mod_date();

 insert into email (email,name) values ('email1','name1');
 insert into email (email,name) values ('email2','name2');
 insert into email (email,name) values ('email3','name3');
select * from email;
update email set email='email1_new' where name='name1';
select * from email;

>
> Kevin Lohka
>
> On Sunday, March 21, 2004, at 09:18 AM, Tom Lane wrote:
>
> >Markus Bertheau <twanger@bluetwanger.de> writes:
> >>The trigger is probably recursively being called.
> >
> >Well, of course.  Every UPDATE causes another UPDATE, which queues
> >another trigger firing.  What else would you expect but an infinite
> >loop?
> >
> >The correct way to do this is illustrated in the plpgsql trigger
> >example at the bottom of this page:
> >http://www.postgresql.org/docs/7.4/static/plpgsql-trigger.html
> >You use a BEFORE trigger and alter the NEW record before it gets
> >written.
> >
> >AFTER triggers are not intended for modifying data in the record they
> >are fired for --- it's too late for that.  (Even if you avoid the
> >infinite loop by testing whether you really need to do another UPDATE
> >or not, it's still ridiculously inefficient to force another cycle of
> >UPDATE when you could just as easily have gotten it right beforehand.)
> >Usually people use AFTER triggers for end-of-command consistency
> >checking or for propagating information to other tables.
> >
> >            regards, tom lane
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

--
joe speigle
www.sirfsup.com

В списке pgsql-novice по дате отправления:

Предыдущее
От: Kevin Lohka
Дата:
Сообщение: Re: Creating Functions & Triggers
Следующее
От: Mihai Tanasescu
Дата:
Сообщение: Re: Simple list tables question