Dear Michael,
> This comes up often and the response is usually something like,
> "Rules are macros, which is why referring to NEW.id causes another
> evaluation of nextval(). If you don't want that to happen then use
> a trigger."
That is indeed what I gathered;-)
It might be sensible to avoid multiple evaluations for the new.*
attributes when possible. I can foresee that it makes the implementation
less straightforward wrt to a pure tree-rewriting stuff.
Also, there is no such thing as a SQL trigger, so one needs to install
plpgsql to develop a simple trigger.
> This comes up often enough that maybe it warrants a "Caveats with
> Rules" section in "The Rule System" chapter
There is neither such section nor subsection in chapter "the rule system".
Maybe a sub-sub-section somewhere?
Table of Contents
32.1. The Query Tree
32.2. Views and the Rule System
32.2.1. How SELECT Rules Work
32.2.2. View Rules in Non-SELECT Statements
32.2.3. The Power of Views in PostgreSQL
32.2.4. Updating a View
32.3. Rules on INSERT, UPDATE, and DELETE
32.3.1. How Update Rules Work
32.3.2. Cooperation with Views
32.4. Rules and Privileges
32.5. Rules and Command Status
32.6. Rules versus Triggers
> and a link to that section in the CREATE RULE documentation, as well as
> mention in the FAQ.
I must admit that I did not look at the FAQ.
The general tone of the rule documentation is "look how great and powerful
it is", and somehow it is nearly as great as promised, but nearly only.
Well, thanks for your comment,
--
Fabien.