Re: chained transactions
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: Fabien COELHO <coelho@cri.ensmp.fr>, Michael Paquier <michael@paquier.xyz>, Heikki Linnakangas <hlinnaka@iki.fi>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2019-02-16T05:22:22Z
Lists: pgsql-hackers
Hi, On 2019-01-02 16:02:21 +0100, Peter Eisentraut wrote: > +++ b/src/backend/access/transam/xact.c > @@ -189,6 +189,7 @@ typedef struct TransactionStateData > bool startedInRecovery; /* did we start in recovery? */ > bool didLogXid; /* has xid been included in WAL record? */ > int parallelModeLevel; /* Enter/ExitParallelMode counter */ > + bool chain; /* start a new block after this one */ > struct TransactionStateData *parent; /* back link to parent */ > } TransactionStateData; > > @@ -2760,6 +2761,36 @@ StartTransactionCommand(void) > MemoryContextSwitchTo(CurTransactionContext); > } > > + > +/* > + * Simple system for saving and restoring transaction characteristics > + * (isolation level, read only, deferrable). We need this for transaction > + * chaining, so that we can set the characteristics of the new transaction to > + * be the same as the previous one. (We need something like this because the > + * GUC system resets the characteristics at transaction end, so for example > + * just skipping the reset in StartTransaction() won't work.) > + */ > +static int save_XactIsoLevel; > +static bool save_XactReadOnly; > +static bool save_XactDeferrable; We normally don't define variables in the middle of a file? Also, why do these need to be global vars rather than defined where we do chaining? I'm imagining a SavedTransactionState struct declared on the stack that's then passed to Save/Restore? Not crucial, but I do wonder if we can come up with a prettier approach for this. Greetings, Andres Freund
Commits
-
Transaction chaining
- 280a408b48d5 12.0 landed
-
Turn transaction_isolation into GUC enum
- f8c10f616fa5 12.0 landed