Set a snapshot before running analyze on a single table, to avoid a
crash when analyzing tables with expressional indexes.
This commit is contained in:
parent
73fa3d9a96
commit
4123dbb75d
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.5.2.1 2005/11/22 18:23:15 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.5.2.2 2005/11/28 13:34:10 alvherre Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -898,6 +898,14 @@ autovacuum_do_vac_analyze(List *relids, bool dovacuum, bool doanalyze,
|
|||||||
vacstmt->relation = NULL; /* all tables, or not used if relids != NIL */
|
vacstmt->relation = NULL; /* all tables, or not used if relids != NIL */
|
||||||
vacstmt->va_cols = NIL;
|
vacstmt->va_cols = NIL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Functions in indexes may want a snapshot set. Note we only need
|
||||||
|
* to do this in limited cases, because it'll be done in vacuum()
|
||||||
|
* otherwise.
|
||||||
|
*/
|
||||||
|
if (doanalyze && !dovacuum && relids != NIL)
|
||||||
|
ActiveSnapshot = CopySnapshot(GetTransactionSnapshot());
|
||||||
|
|
||||||
vacuum(vacstmt, relids);
|
vacuum(vacstmt, relids);
|
||||||
|
|
||||||
pfree(vacstmt);
|
pfree(vacstmt);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user