On 5/24/05, Sebastian Böck <sebastianboeck@xxxxxxxxxx> wrote:
Martijn van Oosterhout wrote:
I'm sure I'm not the only one, but, what are you talking about? RULEs are not really obvious so it would help if you could post an example of what you mean...
I attach some sample SQL (commented) to demonstrate the described scenario:
Hi, I'm not really talking about rules.
I'm talking about updates on *real* tables, and how to avoid unnecessary updates on these tables if the row doesn't change.
The situation looks like this:
I have a view which is a join of a lot of tables.
I have lot of conditional ON UPDATE rules to that view that split one update to the view into updates on the underlying table. The condition of each rule is constructed in a way that the underlying table only gets an update if the corresponding values change.
If I collapse all these rules into one conditional rule and pass all the updates to the underlying tables, I get a lot of unnecessary updates to these real tables, if the values don't change.
Thats what I want to avoid.
Sorry for not beeing that clear.
Sebastian
And how are you preventing the rule execute the update if the field has no change? That is way Martijn told you about showing the rule.
Sorry I don't understand what you mean. What's wrong with:
CREATE OR REPLACE RULE upd AS ON UPDATE TO view WHERE NEW.field = OLD.field DO INSTEAD NOTHING;
AFAIK, if you execute an update on a view that has a ON UPDATE rule all the SQL ACTIONS specified for the rule will be perfomed INSTEAD OF the original update
Ok thanks for the tip, but I alredy knew this ;)
But my original question remeins:
Why does Postgres perform updates to tables, even if the row doesn't change at all?
Thanks
Sebastian
---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to majordomo@xxxxxxxxxxxxxx)