> > Can you describe, or point me to somewhere which describes, all the > things you can do with a rule that you can't do with a trigger? The > only examples of rules in the manual are (1) logging, which I've just > been told is much better done with a trigger, and (2) making update, > insert, and delete work for a view, which is the only way to do it > because views are not allowed to have update, insert, or delete > triggers. However, as I have learned in several recent threads, this > use of rules is fraught with difficulties, especially when the view > has more than one table, and it seems that it would be much easier if > triggers were just allowed on views. What is the real purpose of the > rule system? > You can read more about rules here: http://www.postgresql.org/docs/8.3/interactive/rules.html The documentation calls rules a "query rewrite" system, which helped me understand their use. Whereas triggers are called once per row modified, rules can modify or replace the actual query tree being executed. There are some fine examples here: http://www.postgresql.org/docs/8.3/interactive/rules-triggers.html Rules can be used to change a SELECT statement in-flight. This is actually how views are implemented in postgresql. One interesting example is having rules and triggers watching for deletes or updates on a table. If many rows are modified, rules can be faster. Take this statement: DELETE FROM mydata WHERE idval BETWEEN 10000 and 20000; Say this statement deletes 10,000 rows. The delete trigger would get called 10,000 times whereas the rule is essentially executed once, since it can share the WHERE clause of the user's query.