aboutsummaryrefslogtreecommitdiff
path: root/contrib/postgres_fdw/postgres_fdw.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2023-06-29 10:19:10 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2023-06-29 10:19:10 -0400
commit43af714defa00145981eb542cb71647836b3efa4 (patch)
tree9eaebe13dd086a98a5cb832e17a513549404e735 /contrib/postgres_fdw/postgres_fdw.h
parentb750e74e6ec324f4c9de82587cb6a07490f86cfe (diff)
downloadpostgresql-43af714defa00145981eb542cb71647836b3efa4.tar.gz
postgresql-43af714defa00145981eb542cb71647836b3efa4.zip
Fix order of operations in ExecEvalFieldStoreDeForm().
If the given composite datum is toasted out-of-line, DatumGetHeapTupleHeader will perform database accesses to detoast it. That can invalidate the result of get_cached_rowtype, as documented (perhaps not plainly enough) in that function's API spec; which leads to strange errors or crashes when we try to use the TupleDesc to read the tuple. In short then, trying to update a field of a composite column could fail intermittently if the overall column value is wide enough to require toasting. We can fix the bug at no cost by just changing the order of operations, since we don't need the TupleDesc until after detoasting. (Other callers of get_cached_rowtype appear to get this right already, so there's only one bug.) Note that the added regression test case reveals this bug reliably only with debug_discard_caches/CLOBBER_CACHE_ALWAYS. Per bug #17994 from Alexander Lakhin. Sadly, this patch does not fix the missing-values issue revealed in the bug discussion; we'll need some more work to cover that. Discussion: https://postgr.es/m/17994-5c7100b51b4790e9@postgresql.org
Diffstat (limited to 'contrib/postgres_fdw/postgres_fdw.h')
0 files changed, 0 insertions, 0 deletions