Re: functions with side effect - Mailing list pgsql-general

From Torsten Förtsch
Subject Re: functions with side effect
Date
Msg-id CAKkG4_njDJ+DirVT1of3375zFyLdHvKNvCUzy09pNiTL8crJrw@mail.gmail.com
Whole thread Raw
In response to Re: functions with side effect  (Adrian Klaver <adrian.klaver@aklaver.com>)
Responses Re: functions with side effect  (Adrian Klaver <adrian.klaver@aklaver.com>)
Re: functions with side effect  (Pavel Luzanov <p.luzanov@postgrespro.ru>)
Re: functions with side effect  (Adrian Klaver <adrian.klaver@aklaver.com>)
Re: functions with side effect  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
On Thu, Jul 19, 2018 at 6:35 PM Adrian Klaver <adrian.klaver@aklaver.com> wrote:
On 07/19/2018 07:15 AM, Torsten Förtsch wrote:
> Hi,
>
> assuming
>
> SELECT nextval('s'), currval('s');
>
> or
>
> SELECT * FROM (VALUES (nextval('s'), currval('s'))) t;
>
> is there any guarantee that the 2 output values are the same?

Assuming you are only working in single session:

https://www.postgresql.org/docs/10/static/functions-sequence.html

"currval

     Return the value most recently obtained by nextval for this
sequence in the current session. (An error is reported if nextval has
never been called for this sequence in this session.) Because this is
returning a session-local value, it gives a predictable answer whether
or not other sessions have executed nextval since the current session did."

I know that. My question was about the execution order of f1 and f2 in "SELECT f1(), f2()". In theory they can be executed in any order. But since the side effect in nextval determines the result of currval, I am asking if that order is well-defined or considered an implementation detail like in C.

pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: functions with side effect
Next
From: "Peter J. Holzer"
Date:
Subject: Re: User documentation vs Official Docs