Re: Foreign key isolation tests - Mailing list pgsql-hackers

From Paul A Jungwirth
Subject Re: Foreign key isolation tests
Date
Msg-id CA+renyXgq0AUiQnYPN-D6Wqv834ixqnAWn3HHrEGiMEKMdFewA@mail.gmail.com
Whole thread Raw
In response to Re: Foreign key isolation tests  (Paul A Jungwirth <pj@illuminatedcomputing.com>)
Responses Re: Foreign key isolation tests
List pgsql-hackers
On Thu, Sep 11, 2025 at 9:30 AM Álvaro Herrera <alvherre@kurilemu.de> wrote:
> The wording of the last sentence (which you don't change) is a bit
> funny, because the macros aren't really to be used to check which
> isolation level is selected (which an interested observer could
> determine simply by looking at XactIsoLevel).  What they do is implement
> a layer on top of the selected isolation level -- they are there to know
> which implementation to use depending on the isolation level.
>
> I also think that, for the explanation about serializable, we should
> change "in addition to snapshots" to "in addition to the snapshot",
> calling out the fact that the transaction will in fact use a single
> snapshot throughout.
>
> So how about something like this?  (I include the macros in question so
> that we see exactly what we're talking about).
>
> /*
>  * We implement three isolation levels internally.
>  * The weakest uses one snapshot per statement;
>  * the two stronger levels use one snapshot per database transaction.
>  * Serializable uses predicate locks in addition to the snapshot.
>  * These macros can be used to determine which implementation to use
>  * depending on the prevailing serialization level.
>  */
> #define IsolationUsesXactSnapshot() (XactIsoLevel >= XACT_REPEATABLE_READ)
> #define IsolationIsSerializable() (XactIsoLevel == XACT_SERIALIZABLE)

These all seem like improvements to me. Thanks for the review!

--
Paul              ~{:-)
pj@illuminatedcomputing.com



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: race condition in pg_class
Next
From: Masahiko Sawada
Date:
Subject: Re: POC: enable logical decoding when wal_level = 'replica' without a server restart