summaryrefslogtreecommitdiff
path: root/src/backend/commands
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-10-19 20:15:09 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-10-19 20:15:09 +0000
commit60992456ed00b52f90e47a736ace12668b881225 (patch)
tree9b8b7f69c41d5f96dbfd2fd0d4ddeb81ef52c2c7 /src/backend/commands
parentc1f91a38e20864c14650794a64d52f2d6c900e0f (diff)
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).
Diffstat (limited to 'src/backend/commands')
-rw-r--r--src/backend/commands/indexcmds.c7
-rw-r--r--src/backend/commands/vacuum.c6
2 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 307fb6b6afb..43aec83ce32 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -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);
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index ba2aae57668..2ff3aae6f8a 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -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