Re: Double sequence increase on single insert with RULE on targeted table

Поиск
Список
Период
Сортировка
От Michael Fuhr
Тема Re: Double sequence increase on single insert with RULE on targeted table
Дата
Msg-id 20051116162649.GA49742@winnie.fuhr.org
обсуждение исходный текст
Ответ на Re: Double sequence increase on single insert with RULE on  (Sarunas Krisciukaitis <sarunask@lonus-tech.com>)
Ответы Re: Double sequence increase on single insert with RULE on  (Sarunas Krisciukaitis <sarunask@lonus-tech.com>)
Список pgsql-bugs
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

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Assigning null to an array element in plpgsql
Следующее
От: Matt
Дата:
Сообщение: Huge query stalls at PARSE/BIND stage (2)