Re: DO INSTEAD and conditional rules

Поиск
Список
Период
Сортировка
От David Wheeler
Тема Re: DO INSTEAD and conditional rules
Дата
Msg-id 8880fc76858a02cd5c253aa6b5684623@kineticode.com
обсуждение исходный текст
Ответ на Re: DO INSTEAD and conditional rules  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: DO INSTEAD and conditional rules  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On Apr 26, 2005, at 8:55 AM, Tom Lane wrote:

> Well, they handle simple situations OK, but we keep seeing people get
> burnt as soon as they venture into interesting territory.  For 
> instance,
> if the view is a join, you can't easily make a rule that turns a delete
> into deletions of both joined rows.  And you'll get burnt if you try to
> insert any volatile functions, because of the multiple-evaluation 
> issue.
> Etc.

sharky=# CREATE TABLE a (
sharky(#   id int,
sharky(#   name text
sharky(# );
CREATE TABLE
sharky=# CREATE TABLE b (
sharky(#   a_id int,
sharky(#   rank text
sharky(# );
CREATE TABLE
sharky=#
sharky=# CREATE VIEW ab AS
sharky-#   SELECT id, name, rank
sharky-#   FROM   a, b
sharky-#   WHERE  a.id = b.a_id
sharky-# ;
CREATE VIEW
sharky=# CREATE RULE delete_ab AS
sharky-# ON DELETE TO ab DO INSTEAD (
sharky(#   DELETE FROM b
sharky(#   WHERE  a_id = OLD.id;
sharky(#
sharky(#   DELETE FROM a
sharky(#   WHERE  id = OLD.id;
sharky(# );
CREATE RULE
sharky=#
sharky=#
sharky=# insert into a values (1, 'test');
INSERT 597795 1
sharky=# insert into b values (1, 'sergeant');
INSERT 597796 1
sharky=# select * from ab; id | name |   rank
----+------+----------  1 | test | sergeant
(1 row)

sharky=# delete from ab;
DELETE 0
sharky=# select * from ab; id | name | rank
----+------+------
(0 rows)

sharky=# select * from a; id | name
----+------  1 | test
(1 row)

sharky=# select * from b; a_id | rank
------+------
(0 rows)

Ah, yes, you're right, that is...unexpected. Perhaps OLD can contain 
its values for the duration of the RULE's statements? I'm assuming that 
what's happening is that OLD.id is NULL after the first of the two 
DELETE statements...

> Like I said, I don't have a better idea.  Just a vague feeling of
> dissatisfaction.

I'd call it a bug. ;-)

Regards,

David



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: DO INSTEAD and conditional rules
Следующее
От: Oleg Bartunov
Дата:
Сообщение: Re: bitmapscan test, no success, bs is not faster