mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
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.
This commit is contained in:
@@ -156,7 +156,8 @@ extern void vac_update_relstats(Relation relation,
|
||||
BlockNumber num_all_visible_pages,
|
||||
bool hasindex,
|
||||
TransactionId frozenxid,
|
||||
MultiXactId minmulti);
|
||||
MultiXactId minmulti,
|
||||
bool in_outer_xact);
|
||||
extern void vacuum_set_xid_limits(int freeze_min_age, int freeze_table_age,
|
||||
int multixact_freeze_min_age,
|
||||
int multixact_freeze_table_age,
|
||||
@@ -175,7 +176,7 @@ extern void lazy_vacuum_rel(Relation onerel, VacuumStmt *vacstmt,
|
||||
|
||||
/* in commands/analyze.c */
|
||||
extern void analyze_rel(Oid relid, VacuumStmt *vacstmt,
|
||||
BufferAccessStrategy bstrategy);
|
||||
bool in_outer_xact, BufferAccessStrategy bstrategy);
|
||||
extern bool std_typanalyze(VacAttrStats *stats);
|
||||
extern double anl_random_fract(void);
|
||||
extern double anl_init_selection_state(int n);
|
||||
|
Reference in New Issue
Block a user