Re: BUG #17385: "RESET transaction_isolation" inside serializable transaction causes Assert at the transaction end
Masahiko Sawada <sawada.mshk@gmail.com>
From: Masahiko Sawada <sawada.mshk@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>, d.koval@postgrespro.ru,
dilipbalaut@gmail.com, andrewbille@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2022-03-23T08:48:43Z
Lists: pgsql-bugs
On Tue, Mar 15, 2022 at 3:59 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > > After thinking about this some more, it seems like there is a related > problem with GUC save/restore actions. Consider > > regression=# create function foo() returns int language sql as 'select 1' > regression-# set transaction_read_only = 1; > CREATE FUNCTION > regression=# begin; > BEGIN > regression=*# select foo(); > foo > ----- > 1 > (1 row) > > regression=*# show transaction_read_only; > transaction_read_only > ----------------------- > off > (1 row) Good catch. > > transaction_read_only was set while we executed foo(), but now it's > off again. I've not tried to weaponize this behavior, but if we > have any optimizations that depend on transaction_read_only, this > would probably break them. (SERIALIZABLE mode looks like a likely > candidate for problems.) > > So it seems like we also need to forbid save/restore for these > settings, which probably means rejecting action==GUC_ACTION_SAVE > as well as value==NULL. That makes NO_RESET something of a misnomer, > but I don't have an idea for a better name. Yes, it seems we need that change too. I'll update the patch. Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/
Commits
-
Renumber GUC flags for a bit more sanity.
- 7ac918ada003 16.0 landed
-
Introduce GUC_NO_RESET flag.
- 385366426511 16.0 landed