On Mon, 5 Apr 2021 at 14:18, Bruce Momjian <br...@momjian.us> wrote:

> On Sun, Apr  4, 2021 at 10:02:20AM -0400, Dave Cramer wrote:
> > On Sun, 4 Apr 2021 at 09:12, Bruce Momjian <br...@momjian.us> wrote:
> >     > OK, that makes sense, but I think it is wrong minded to think that
> this
> >     > absolves one of taking isolation into account.
> >     >
> >     > When you make the first read you will still have to deal with all
> of the
> >     > isolation issues
> >
> >     I have no idea what you are saying above.  Why is a SELECT-only CTE
> not
> >     the same as a repeatable-read SELECT-only multi-statement
> transaction?
> >     Are you saying that a SELECT in a CTE doesn't do SELECT FOR UPDATE?
> >
> >
> > No, but where is this documented ?
>
> Well, every query runs with a single snapshot, even WITH queries.  We do
> document how non-SELECT WITH visibility is handled:
>
>         https://www.postgresql.org/docs/13/sql-select.html
>
>         The primary query and the WITH queries are all (notionally)
> executed at
>         the same time. This implies that the effects of a data-modifying
>         statement in WITH cannot be seen from other parts of the query,
> other
>         than by reading its RETURNING output. If two such data-modifying
>         statements attempt to modify the same row, the results are
> unspecified.
>
>         A key property of WITH queries is that they are normally evaluated
> only
>         once per execution of the primary query, even if the primary query
>         refers to them more than once. In particular, data-modifying
> statements
>         are guaranteed to be executed once and only once, regardless of
> whether
>         the primary query reads all or any of their output.
>
>
I think we are in agreement. My point was that WITH queries don't change
the isolation semantics.

I was pretty sure we didn't do a SELECT FOR UPDATE which would imply a lock.


Dave Cramer
www.postgres.rocks

Reply via email to