Re: BUG #17994: Invalidating relcache corrupts tupDesc inside ExecEvalFieldStoreDeForm()
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org,
Andrew Dunstan <andrew@dunslane.net>
Date: 2023-06-28T19:52:28Z
Lists: pgsql-bugs
Andres Freund <andres@anarazel.de> writes: > On 2023-06-28 14:49:34 -0400, Tom Lane wrote: >> That's not sufficient lifespan in the scenario we're dealing >> with here: if the tupdesc gets trashed anytime before the >> eventual ExecEvalFieldStoreForm(), we'll have garbage in the >> result tuple. > What are the scenarios that could lead to the tupledesc being released before > ExecEvalFieldStoreForm()? I guess a function call that does an ALTER TABLE > might do the trick? But shouldn't such cases be prohibited by > CheckTableNotInUse()? Any old cache flush could do it; you don't need a local trigger event. (Alexander's original test case uses CREATE PUBLICATION to trigger the cache flush, but that's just an easy way to make it more-or-less deterministic.) > If other sessions caused the tupledesc to be changed, > we should already hang onto the old definition via the > RememberToFreeTupleDescAtEOX() mechanism? I believe the tupdesc in question is actually in the typcache, which doesn't have anything like RememberToFreeTupleDescAtEOX (which is a horrid hack anyway if you ask me). We could probably make things better for this specific case by teaching the typcache not to replace a cached tupdesc unless its contents actually change. But that just makes it harder to get to a bug instance; it's not a cure-all. regards, tom lane
Commits
-
Cache by-reference missing values in a long lived context
- 2d13dab048a7 11.22 landed
- f938acd68b08 16.0 landed
- a68458108512 17.0 landed
- 75f323aa1c1e 15.5 landed
- 7f4515a58ebd 14.10 landed
- 1bb619d4d628 13.13 landed
- 01993ac748fd 12.17 landed
-
Fix order of operations in ExecEvalFieldStoreDeForm().
- d0ab203bc192 13.12 landed
- cc8cca3c2d60 15.4 landed
- 7f11b7a9cf18 11.21 landed
- 53b93e853ffe 12.16 landed
- 43af714defa0 16.0 landed
- 0789b82a9792 14.9 landed