Test IsInTransactionChain, not IsTransactionBlock, in vac_update_relstats.
Tom Lane <tgl@sss.pgh.pa.us>
Test IsInTransactionChain, not IsTransactionBlock, in vac_update_relstats. As noted by Noah Misch, my initial cut at fixing bug #11638 didn't cover all cases where ANALYZE might be invoked in an unsafe context. We need to test the result of IsInTransactionChain not IsTransactionBlock; which is notationally a pain because IsInTransactionChain requires an isTopLevel flag, which would have to be passed down through several levels of callers. I chose to pass in_outer_xact (ie, the result of IsInTransactionChain) rather than isTopLevel per se, as that seemed marginally more apropos for the intermediate functions to know about.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/commands/analyze.c | modified | +12 −7 |
| src/backend/commands/vacuum.c | modified | +12 −9 |
| src/backend/commands/vacuumlazy.c | modified | +4 −2 |
| src/include/commands/vacuum.h | modified | +3 −2 |