On Wed, Nov 16, 2005 at 10:31:10AM +0200, Sarunas Krisciukaitis wrote: > I understand that RULES are like macros. > Strangest thing here is that INSERT to test1 will touch only one > sequence: test1_id_seq. > And it increments test1_id_seq twice during insert with RULE.
Yes, that's a well-known effect of rewriting a query that includes a call to nextval(). NEW.id in the rule doesn't refer to the value that's inserted, but rather to the expression that's evaluated to get that value. Since you didn't provide a value for id it gets the default: nextval('test1_id_seq'). That expression is used in both inserts, so the sequence gets incremented twice. See the archives for numerous past discussions of this behavior. -- Michael Fuhr ---------------------------(end of broadcast)--------------------------- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match