On Fri, Oct 28, 2011 at 10:28 AM, <depstein@xxxxxxxxxxxxxxxxx> wrote: >> -----Original Message----- >> From: Tom Lane [mailto:tgl@xxxxxxxxxxxxx] >> Sent: Friday, October 28, 2011 7:22 PM >> To: Dmitry Epstein >> Cc: pgsql-general@xxxxxxxxxxxxxx; Peter Gagarinov >> Subject: Re: nextval skips values between consecutive calls >> >> <depstein@xxxxxxxxxxxxxxxxx> writes: >> > -- This is rather surprising >> > select nextval(' test_sequence'), generate_series(1, 1); -- 3, 1 >> > select nextval(' test_sequence'), generate_series(1, 1); -- 5, 1 >> >> > Is there any explanation for why nextval skips a value in the second case? >> >> The targetlist is evaluated twice because of the presence of the set-returning >> function. On the second pass, generate_series reports that it's done, and so >> evaluation stops ... but nextval() was already called a second time. >> >> SRFs in SELECT targetlists are a pretty dangerous thing, with a lot of surprising >> behaviors, especially if you combine them with other volatile functions. I >> recommend avoiding them. They'll probably be deprecated altogether as >> soon as we have LATERAL. >> >> regards, tom lane > > What's a good alternative in the meantime? Suppose I need to incorporate some unnests into my select, for example? (Well, I already found one alternative that seems to work, but I am not sure that's optimal.) Typically for guaranteed LATERAL-like behaviors you need to use a CTE. merlin -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general