Re: BUG #15990: PROCEDURE throws "SQL Error [XX000]: ERROR: no known snapshots" with PostGIS geometries
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Alvaro Herrera <alvherre@alvh.no-ip.org>, Robert Haas <robertmhaas@gmail.com>, a.wicht@gmail.com, pgsql-bugs@lists.postgresql.org, Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Date: 2021-05-12T16:13:54Z
Lists: pgsql-bugs
Hi, On 2021-05-12 12:00:10 -0400, Tom Lane wrote: > Yeah, on further thought, the real question to be asking here is > "what's protecting that in-flight datum from becoming a dangling > pointer?". AFAICT, the answer right now is "nothing". Therefore, > it is *never* okay for plpgsql to be executing without a registered > transaction snapshot; and it seems quite unlikely that it'd be any > safer for any other PL. A bit independently of this concrete issue, I wonder if we could make it easier to detect such bugs. If we somehow™ associated an xmin horizon with toasted datums, we could then assert before dereferencing that we still guarantee that such a reference is still valid. The "somehow" part obviously isn't entirely trivial, but it seems we could hack it by encoding it as a different vartag? Greetings, Andres Freund
Commits
-
Remove plpgsql's special-case code paths for SET/RESET.
- 30168be8f75b 14.0 landed
-
Restore the portal-level snapshot after procedure COMMIT/ROLLBACK.
- 84f5c2908dad 14.0 landed
- ef9480509622 11.13 landed
- d18ee6f92d9a 13.4 landed
- 41c6a5bec25e 12.8 landed
-
Avoid detoasting failure after COMMIT inside a plpgsql FOR loop.
- f21fadafaf0f 14.0 landed
- c64183f234e8 13.4 landed
- 8d341d6cb6c9 12.8 landed
- 0c1b2cb17c25 11.13 landed