Re: Can triggers update other tables?

Поиск
Список
Период
Сортировка
От Merlin Moncure
Тема Re: Can triggers update other tables?
Дата
Msg-id CAHyXU0yff47m0ZDmE_AwSMVAepoPKEiBhAs91BD--8zsehP49A@mail.gmail.com
обсуждение исходный текст
Ответ на Can triggers update other tables?  (Rikard <rikard.bosnjakovic@gmail.com>)
Список pgsql-novice
On Wed, Oct 19, 2011 at 7:24 PM, Rikard <rikard.bosnjakovic@gmail.com> wrote:
> VERSION = 'PostgreSQL 8.4.2 on i686-pc-linux-gnu, compiled by GCC gcc
> (GCC) 3.4.6, 32-bit'
>
> I'm reading at http://www.postgresql.org/docs/8.4/static/sql-createtrigger.html
> and http://www.postgresql.org/docs/8.4/static/plpgsql.html but I
> cannot solve this problem. The very outline is that I'm having two
> tables (in reality there are a lot more), something like this:
>
>  SUMMARY ( id integer, num_stores integer; );
>  ITEMS ( id serial PRIMARY KEY; name text; some_reference integer,
> some_value smallint; ).
>
> When a row is inserted in ITEMS, I want to launch a trigger that
> issues a "UPDATE num_stores SET num_stores=(SELECT count(*) FROM items
> WHERE id = <trigger_table.id>) where id = <trigger_table.id>".
> Triggers seem to be run on functions returning plpgsql and I don't
> know how to issue ordinary SQL-commands in SQL, so I don't know how to
> reference these two tables in a single trigger.

Not following you here.  plpgsql functions are just ordinary SQL with
some extra features -- loops and such. you can do pretty much any ad
hoc sql you want inside a trigger...

CREATE OR REPLACE FUNCTION items_update() returns triggers AS
$$
BEGIN
UPDATE num_stores SET num_stores=(SELECT count(*) FROM items
 WHERE id = new.id) where id = new.id;
END;
$$ language plpgsql;

note these kind of triggers are usually harder to write than they look
and my have unpleasant performance characteristics.  for
materialization/aggregation, it might be a good idea to look at
statement level triggers and detect updated rows based on a timestamp.

merlin

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

Предыдущее
От: Rikard
Дата:
Сообщение: Can triggers update other tables?
Следующее
От: "Morris, Roy"
Дата:
Сообщение: contrib uuid X64