aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorHiroshi Inoue <inoue@tpf.co.jp>2001-02-23 09:26:14 +0000
committerHiroshi Inoue <inoue@tpf.co.jp>2001-02-23 09:26:14 +0000
commit34822e517ab8642cd7427d8f848a5fb0c98c6a0c (patch)
tree1ffd2519a886e5be392b42b1219b0922056434b0 /src/backend
parent5735c4cf3d059914e2b9d294203aa06fb2c4ac75 (diff)
downloadpostgresql-34822e517ab8642cd7427d8f848a5fb0c98c6a0c.tar.gz
postgresql-34822e517ab8642cd7427d8f848a5fb0c98c6a0c.zip
Reindex of shared system indexes must be overwrite mode.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/catalog/index.c23
-rw-r--r--src/backend/commands/indexcmds.c7
2 files changed, 26 insertions, 4 deletions
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 1c2d6324cfc..4d35ddeee8f 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.140 2001/01/29 00:39:16 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.141 2001/02/23 09:26:14 inoue Exp $
*
*
* INTERFACE ROUTINES
@@ -2087,7 +2087,12 @@ reindex_index(Oid indexId, bool force, bool inplace)
#ifndef OLD_FILE_NAMING
if (!inplace)
- setNewRelfilenode(iRel);
+ {
+ inplace = IsSharedSystemRelationName(NameStr(iRel->rd_rel->relna
+me));
+ if (!inplace)
+ setNewRelfilenode(iRel);
+ }
#endif /* OLD_FILE_NAMING */
/* Obtain exclusive lock on it, just to be sure */
LockRelation(iRel, AccessExclusiveLock);
@@ -2196,6 +2201,20 @@ reindex_relation(Oid relid, bool force)
elog(ERROR, "the target relation %u is nailed", relid);
}
#endif /* ENABLE_REINDEX_NAILED_RELATIONS */
+ /*
+ * Shared system indexes must be overwritten because it's
+ * impossible to update pg_class tuples of all databases.
+ */
+ if (IsSharedSystemRelationName(NameStr(rel->rd_rel->relname)))
+ {
+ if (IsIgnoringSystemIndexes())
+ {
+ overwrite = true;
+ deactivate_needed = true;
+ }
+ else
+ elog(ERROR, "the target relation %u is shared", relid);
+ }
RelationClose(rel);
#endif /* OLD_FILE_NAMING */
old = SetReindexProcessing(true);
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 173c3a3d551..6497da615b8 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.44 2001/01/24 19:42:52 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.45 2001/02/23 09:26:14 inoue Exp $
*
*-------------------------------------------------------------------------
*/
@@ -633,6 +633,7 @@ void
ReindexIndex(const char *name, bool force /* currently unused */ )
{
HeapTuple tuple;
+ bool overwrite = false;
/* ----------------
* REINDEX within a transaction block is dangerous, because
@@ -656,7 +657,9 @@ ReindexIndex(const char *name, bool force /* currently unused */ )
#ifdef OLD_FILE_NAMING
if (!reindex_index(tuple->t_data->t_oid, force, false))
#else
- if (!reindex_index(tuple->t_data->t_oid, force, false))
+ if (IsIgnoringSystemIndexes())
+ overwrite = true;
+ if (!reindex_index(tuple->t_data->t_oid, force, overwrite))
#endif /* OLD_FILE_NAMING */
elog(NOTICE, "index \"%s\" wasn't reindexed", name);