Re: BUG #17385: "RESET transaction_isolation" inside serializable transaction causes Assert at the transaction end
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: sawada.mshk@gmail.com, d.koval@postgrespro.ru, dilipbalaut@gmail.com,
andrewbille@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2022-03-14T18:59:37Z
Lists: pgsql-bugs
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) 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. regards, tom lane
Commits
-
Renumber GUC flags for a bit more sanity.
- 7ac918ada003 16.0 landed
-
Introduce GUC_NO_RESET flag.
- 385366426511 16.0 landed