Re: Triggers

Поиск
Список
Период
Сортировка
От Peter Gibbs
Тема Re: Triggers
Дата
Msg-id 015701c2452d$b976a300$0b01010a@emkel.co.za
обсуждение исходный текст
Ответ на Triggers  (Jean-Christian Imbeault <jc@mega-bucks.co.jp>)
Список pgsql-general
Jean-Christian Imbeault wrote:

> I have a with a a column defined as not null. The value however can be
> found by looking it up in another table. I would like to create a
> trigger that after insert would look up the need value and put it in the
> record being inserted.
>
> Unfortunately the column is defined as not null so I fear the insert
> would fail and the trigger never get called. How can I get around this?
>
> create table t {
>
> id  serial  primary key,
> a   integer not null,
> b   integer not null  -- b can be found in another table
> };
>
> insert into t(a) values('1'); -- this would start the trigger and turn
> the insert into:
>
> insert into t(a,b) values('1', 'some value from another table');
>
> Are thriggers the wrong way to go about this?
>

No, a trigger is indeed what you need - specifically a 'before insert'
trigger, which is run before the row is inserted, and gives you an
opportunity to alter the contents of the 'new' row before insertion.

e.g.

create function t_lookup_a() returns opaque as '
  begin
    new.b = 123;  -- do whatever is needed here
    return new;
  end;
' language 'plpgsql';

create trigger t_insert before insert on t for each row
  execute procedure t_lookup_a();

--
Peter Gibbs
EmKel Systems



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

Предыдущее
От: Oliver Elphick
Дата:
Сообщение: Re: Triggers
Следующее
От: Roj Niyogi
Дата:
Сообщение: Re: Good PL/pgSQL ressources>