Re: currval() within one statement

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: sad <sad(at)bankir(dot)ru>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: currval() within one statement
Date: 2008-01-22 10:22:15
Message-ID: 4795C3D7.6050209@lelarge.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

sad wrote:
> Guillaume Lelarge wrote:
>> sad wrote:
>>> A. Kretschmer wrote:
>>>
>>>>> is it expected that the currval() changes its value between calls
>>>>> within one statement ?
>>>
>>>> Conclusion, don't call nextval() within a TRIGGER, and insert either
>>>> nextval() for the column or omit this column.
>>>
>>> I only note that i still want to discuss the titled problem or to be
>>> given an exact pointer to documentation regarding the currval() behavior
>>> in the described situation, that i had.
>>>
>>
>> Well, your situation is weird, to say the least. currval() doesn't
>> change the value of a sequence. Adding a trigger that calls nextval()
>> will change the value. But you're not telling us which kind of
>> trigger... per statement or for each row ? if it's for each row, then
>> that's quite understandable.
>
> my fault -- i forgot to say.
> The trigger is "for each row".
>
> It is understandable, i agree, but it is surprising -- alternative
> behavior (constant result off currval()) is understandable too.
>

It isn't surprising. A "for each row" trigger will execute the trigger
function for each individual row, which will executes nextval each
time... so each currval will get a different value.

--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message sad 2008-01-22 10:22:32 Re: currval() within one statement
Previous Message Richard Huxton 2008-01-22 09:13:56 Re: currval() within one statement