Re: Rules with Conditions: Bug, or Misunderstanding - Mailing list pgsql-sql

From Tom Lane
Subject Re: Rules with Conditions: Bug, or Misunderstanding
Date
Msg-id 19579.975544973@sss.pgh.pa.us
Whole thread Raw
In response to Rules with Conditions: Bug, or Misunderstanding  ("Joel Burton" <jburton@scw.org>)
Responses Re: [HACKERS] Re: Rules with Conditions: Bug, or Misunderstanding
Re: Rules with Conditions: Bug, or Misunderstanding
Re: Rules with Conditions: Bug, or Misunderstanding
List pgsql-sql
"Joel Burton" <jburton@scw.org> writes:
> create rule dev_ins as on update to dev_col_comments where 
> old.description isnull do instead insert into pg_description ( objoid, 
> description) values (old.att_oid, new.description);

> create rule dev_upd as on update to dev_col_comments where 
> old.description notnull do instead update pg_description set 
> description=new.description where objoid=old.att_oid;

> This doesn't work: I get a "cannot update view w/o rule" error 
> message, both for fields where description was null, and for fields 
> where it wasn't null.

Hm.  Perhaps the "cannot update view" test is too strict --- it's not
bright enough to realize that the two rules together cover all cases,
so it complains that you *might* be trying to update the view.  As the
code stands, you must provide an unconditional DO INSTEAD rule to
implement insertion or update of a view.

I'm not sure this is a big problem, though, because the solution is
simple: provide an unconditional rule with multiple actions.  For
example, I think this will work:

create rule dev_upd as on update to dev_col_comments do instead
( insert into pg_description (objoid, description)   select old.att_oid, new.description WHERE old.description isnull;
updatepg_description set description=new.description   where objoid = old.att_oid;
 
)

but I haven't tried it...
        regards, tom lane


pgsql-sql by date:

Previous
From: "Kenn Thompson"
Date:
Subject: Subselect in join?
Next
From: Philip Warner
Date:
Subject: Re: Subselect in join?