public inbox for [email protected]  
help / color / mirror / Atom feed
From: Ron Johnson <[email protected]>
To: [email protected] <[email protected]>
Subject: Re: Repeatable Read Isolation Level "transaction start time"
Date: Tue, 24 Sep 2024 12:12:07 -0400
Message-ID: <CANzqJaAdL0bwqabW-ttWvRM4WXYhJ1FTtK3zXZ0p9KdcjgM_9Q@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<CAKFQuwYvh02jtAAmybAPGC00k-AWiOqm3vT2Aj3m8dKLO+fugg@mail.gmail.com>
	<CANzqJaC0Puj0WnnjQ2K2qy1MQJY4O8QP5uJbNoqeQrhfdgJ8Xg@mail.gmail.com>
	<[email protected]>

On Tue, Sep 24, 2024 at 12:06 PM Adrian Klaver <[email protected]>
wrote:

> On 9/24/24 05:59, Ron Johnson wrote:
> > On Tue, Sep 24, 2024 at 8:29 AM David G. Johnston
> > <[email protected] <mailto:[email protected]>> wrote:
> >
> >     On Monday, September 23, 2024, Wizard Brony <[email protected]
> >     <mailto:[email protected]>> wrote:
> >
> >
> https://www.postgresql.org/docs/16/transaction-iso.html#XACT-REPEATABLE-READ
> <
> https://www.postgresql.org/docs/16/transaction-iso.html#XACT-REPEATABLE-READ
> >
> >
> >         The PostgreSQL documentation for the Repeatable Read Isolation
> >         Level states the following:
> >
> >         “UPDATE, DELETE, MERGE, SELECT FOR UPDATE, and SELECT FOR SHARE
> >         commands behave the same as SELECT in terms of searching for
> >         target rows: they will only find target rows that were committed
> >         as of the transaction start time.”
> >
> >         What is defined as the "transaction start time?" When I first
> >         read the statement, I interpreted it as the start of the
> >         transaction:
> >
> >         BEGIN;
> >         SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
> >
> >         But in my testing, I find that according to that statement, the
> >         transaction start time is actually "the start of the first
> >         non-transaction-control statement in the transaction" (as
> >         mentioned earlier in the section). Is my conclusion correct, or
> >         am I misunderstanding the documentation?
> >
> >
> >     Probably, since indeed the transaction cannot start at begin because
> >     once it does start it cannot be modified.
> >
> > Huh?
>
> BEGIN;
> SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
>
> I read it as the transaction does not start at BEGIN because if it did
> you could not SET TRANSACTION to change it's characteristics.
>
> The docs go into more detail:
>
> https://www.postgresql.org/docs/current/sql-set-transaction.html
>
> The transaction isolation level cannot be changed after the first query
> or data-modification statement (SELECT, INSERT, DELETE, UPDATE, MERGE,
> FETCH, or COPY) of a transaction has been executed.
>
>
> So:
>
> begin ;
> SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
> SET
> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
> SET
> select * from csv_test ;
> [...]
> SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
> ERROR:  SET TRANSACTION ISOLATION LEVEL must be called before any query
>

Makes sense.  Never would have occurred to me to try and change the
isolation level using a second SET TRANSACTION statement, though.

-- 
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> crustacean!


view thread (4+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: Repeatable Read Isolation Level "transaction start time"
  In-Reply-To: <CANzqJaAdL0bwqabW-ttWvRM4WXYhJ1FTtK3zXZ0p9KdcjgM_9Q@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox