From: | Sarunas Krisciukaitis <sarunask(at)lonus-tech(dot)com> |
---|---|
To: | Michael Fuhr <mike(at)fuhr(dot)org> |
Cc: | Tomas Zerolo <tomas(at)tuxteam(dot)de>, pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: Double sequence increase on single insert with RULE on |
Date: | 2005-11-17 08:11:29 |
Message-ID: | 437C3B31.30001@lonus-tech.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Ok :) Then I found the solution in this partical case:
CREATE RULE test1_on_insert AS ON INSERT TO test1 DO INSERT INTO
test_log1 (qid) VALUES ( (SELECT lastval()) );
With this rule all inserts are working as expected :)
Thank you for you advise :)
Sarunas
Michael Fuhr wrote:
>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.
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Matt Carter | 2005-11-17 08:27:00 | Huge query stalls at PARSE/BIND stage (2) |
Previous Message | Acure | 2005-11-17 00:31:50 | BUG #2048: initdb hang up |