Tod McQuillin <devin(at)spamcop(dot)net> writes:
> How the heck can one insert and update generate three rows?
Looks like a rule rewriter bug to me. It seems to be fixed in 7.1;
I get
regression=# SELECT * FROM orders;
order_id | menu_id | price
----------+---------+-------
1 | 2 | -1
(1 row)
which is the correct result given that rules are executed before the
original query. (Which is why you need a trigger for this...)
regards, tom lane