mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
Invert logic in pg_exec_query_string() so that we set a snapshot for
all utility statement types *except* a short list, per discussion a few days ago. Add missing SetQuerySnapshot calls in VACUUM and REINDEX, and guard against calling REINDEX DATABASE from a function (has same problem as VACUUM).
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.90 2002/09/23 00:42:48 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.91 2002/10/19 20:15:08 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -669,6 +669,10 @@ ReindexDatabase(const char *dbname, bool force, bool all)
|
||||
if (IsTransactionBlock())
|
||||
elog(ERROR, "REINDEX DATABASE cannot run inside a BEGIN/END block");
|
||||
|
||||
/* Running this from a function would free the function context */
|
||||
if (!MemoryContextContains(QueryContext, (void *) dbname))
|
||||
elog(ERROR, "REINDEX DATABASE cannot be executed from a function");
|
||||
|
||||
/*
|
||||
* Create a memory context that will survive forced transaction
|
||||
* commits we do below. Since it is a child of QueryContext, it will
|
||||
@ -724,6 +728,7 @@ ReindexDatabase(const char *dbname, bool force, bool all)
|
||||
for (i = 0; i < relcnt; i++)
|
||||
{
|
||||
StartTransactionCommand(true);
|
||||
SetQuerySnapshot(); /* might be needed for functional index */
|
||||
if (reindex_relation(relids[i], force))
|
||||
elog(NOTICE, "relation %u was reindexed", relids[i]);
|
||||
CommitTransactionCommand(true);
|
||||
|
@ -13,7 +13,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.241 2002/09/27 20:57:08 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.242 2002/10/19 20:15:09 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -306,7 +306,10 @@ vacuum(VacuumStmt *vacstmt)
|
||||
* multiple tables).
|
||||
*/
|
||||
if (vacstmt->vacuum)
|
||||
{
|
||||
StartTransactionCommand(true);
|
||||
SetQuerySnapshot(); /* might be needed for functional index */
|
||||
}
|
||||
else
|
||||
old_context = MemoryContextSwitchTo(anl_context);
|
||||
|
||||
@ -724,6 +727,7 @@ vacuum_rel(Oid relid, VacuumStmt *vacstmt, char expected_relkind)
|
||||
|
||||
/* Begin a transaction for vacuuming this relation */
|
||||
StartTransactionCommand(true);
|
||||
SetQuerySnapshot(); /* might be needed for functional index */
|
||||
|
||||
/*
|
||||
* Check for user-requested abort. Note we want this to be inside a
|
||||
|
Reference in New Issue
Block a user