Search Postgresql Archives

Re: Newbie question on RULEs .. or .. bug ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Leif Jensen <leif@xxxxxxxxxxx> writes:
> CREATE RULE update_tasks2taskshead AS
>   ON UPDATE TO tasks WHERE NEW.seq = 0
>   DO NOTHING
> ;

That rule looks a bit useless ...

> CREATE RULE update_tasks2ganntinfo AS
>   ON UPDATE TO tasks
>   DO INSTEAD (
>     update ganntinfo set
>       id = NEW.id, seq = NEW.seq, category = NEW.category, name = NEW.name
>       -- WHERE id = NEW.id AND seq = NEW.seq AND category = NEW.category
>     ;
>   )
> ;

You definitely need a WHERE clause in that rule; otherwise you get
exactly the result you saw: all rows of ganntinfo are updated.  The
comment in the manual about the original WHERE clause really means
that the values of "NEW" will be constrained to take on only the
values determined by the original WHERE.  Your update is basically a join
of ganntinfo with the subset of the tasks view determined by the
original WHERE --- so you have to constrain ganntinfo too.  I suppose
that you want something like

    update ganntinfo set
      category = NEW.category, name = NEW.name
      WHERE id = NEW.id AND seq = NEW.seq
    ;

since id/seq is your primary key for ganntinfo.

			regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux