Re: Backend bug applying insert rules?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Backend bug applying insert rules?
Дата
Msg-id 11301.963591411@sss.pgh.pa.us
обсуждение исходный текст
Список pgsql-bugs
Luis Miguel <lmc@nova.es> writes:
> When the rules applies as on insert the last row inserted isn't
> processed.

I think you are misunderstanding the way rules work.  A trigger would
be a much more natural (and efficient!) way of accomplishing what you
are trying to do here.

The thing you have to remember about an ON INSERT rule is that it
doesn't apply to just the particular row you inserted.  It causes the
given additional queries to be executed over the whole table!  In the
example as you give it, each insert will cause the following additional
actions to be taken:

insert into expurgados select
    capturas.codigo, 'processed', capturas.fecha
    from capturas
    where capturas.destino=1 and capturas.ct=false;
update capturas set ct=true
    where capturas.destino=1 and capturas.ct=false;

*plus* similar queries derived from your other two rules.  This will
start to get slow when capturas gets large.

Finally, I believe that these operations are executed *before* the
insert occurs, not after.  So what's actually happening is that the
changes you think are being triggered by an insert don't happen until
the next insert.

Rules are good for global updates but not so hot for transforming a
single insert into some other operation.  Use triggers instead, you'll
be much happier.

BTW, doing the rule-invoked operations first seems reasonable for
ON UPDATE and ON DELETE operations, but I am inclined to think it is a
bug (or at least bad design) for ON INSERT to work that way.  Seems like
ON INSERT rules ought to execute after the INSERT, not before.  Jan, any
comments?

            regards, tom lane

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

Предыдущее
От: JanWieck@t-online.de (Jan Wieck)
Дата:
Сообщение: Re: [HACKERS] Foreign key bugs (Re: "New" bug?? Serious - crashes backend.)
Следующее
От: Jerome Alet
Дата:
Сообщение: bug with alter table add column