From b9527e984092e838790b543b014c0c2720ea4f11 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 Mar 2007 00:33:44 +0000 Subject: First phase of plan-invalidation project: create a plan cache management module and teach PREPARE and protocol-level prepared statements to use it. In service of this, rearrange utility-statement processing so that parse analysis does not assume table schemas can't change before execution for utility statements (necessary because we don't attempt to re-acquire locks for utility statements when reusing a stored plan). This requires some refactoring of the ProcessUtility API, but it ends up cleaner anyway, for instance we can get rid of the QueryContext global. Still to do: fix up SPI and related code to use the plan cache; I'm tempted to try to make SQL functions use it too. Also, there are at least some aspects of system state that we want to ensure remain the same during a replan as in the original processing; search_path certainly ought to behave that way for instance, and perhaps there are others. --- src/backend/commands/indexcmds.c | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) (limited to 'src/backend/commands/indexcmds.c') diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8c5fdbb6c9..ba185431be 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.156 2007/03/06 02:06:12 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.157 2007/03/13 00:33:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -77,7 +77,6 @@ static bool relationHasPrimaryKey(Relation rel); * 'attributeList': a list of IndexElem specifying columns and expressions * to index on. * 'predicate': the partial-index condition, or NULL if none. - * 'rangetable': needed to interpret the predicate. * 'options': reloptions from WITH (in list-of-DefElem form). * 'unique': make the index enforce uniqueness. * 'primary': mark the index as a primary key in the catalogs. @@ -99,7 +98,6 @@ DefineIndex(RangeVar *heapRelation, char *tableSpaceName, List *attributeList, Expr *predicate, - List *rangetable, List *options, bool unique, bool primary, @@ -300,18 +298,6 @@ DefineIndex(RangeVar *heapRelation, ReleaseSysCache(tuple); - /* - * If a range table was created then check that only the base rel is - * mentioned. - */ - if (rangetable != NIL) - { - if (list_length(rangetable) != 1 || getrelid(1, rangetable) != relationId) - ereport(ERROR, - (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), - errmsg("index expressions and predicates can refer only to the table being indexed"))); - } - /* * Validate predicate, if given */ @@ -1218,6 +1204,7 @@ ReindexTable(RangeVar *relation) * * To reduce the probability of deadlocks, each table is reindexed in a * separate transaction, so we can release the lock on it right away. + * That means this must not be called within a user transaction block! */ void ReindexDatabase(const char *databaseName, bool do_system, bool do_user) @@ -1241,13 +1228,6 @@ ReindexDatabase(const char *databaseName, bool do_system, bool do_user) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE, databaseName); - /* - * We cannot run inside a user transaction block; if we were inside a - * transaction, then our commit- and start-transaction-command calls would - * not have the intended effect! - */ - PreventTransactionChain((void *) databaseName, "REINDEX DATABASE"); - /* * Create a memory context that will survive forced transaction commits we * do below. Since it is a child of PortalContext, it will go away -- cgit v1.2.1