Tod McQuillin <devin@spamcop.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