aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/cluster.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2005-05-10 13:16:26 +0000
committerBruce Momjian <bruce@momjian.us>2005-05-10 13:16:26 +0000
commita4dde3bff36dac1ac0b699becad6f103d861a874 (patch)
treeb6b8c75c99a927377c455008ea7657936bec90f6 /src/backend/commands/cluster.c
parentdc5ebcfcce73228a164649fd24bfcd3d3830d61f (diff)
downloadpostgresql-a4dde3bff36dac1ac0b699becad6f103d861a874.tar.gz
postgresql-a4dde3bff36dac1ac0b699becad6f103d861a874.zip
Report index name on CLUSTER failure. Also, suggest ALTER TABLE
WITHOUT CLUSTER for cluster failure of a single table in a full db cluster.
Diffstat (limited to 'src/backend/commands/cluster.c')
-rw-r--r--src/backend/commands/cluster.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 5d3382a375e..aab03ea4b33 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.137 2005/05/06 17:24:53 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.138 2005/05/10 13:16:26 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -292,7 +292,7 @@ cluster_rel(RelToCluster *rvtc, bool recheck)
OldHeap = heap_open(rvtc->tableOid, AccessExclusiveLock);
/* Check index is valid to cluster on */
- check_index_is_clusterable(OldHeap, rvtc->indexOid);
+ check_index_is_clusterable(OldHeap, rvtc->indexOid, recheck);
/* rebuild_relation does all the dirty work */
rebuild_relation(OldHeap, rvtc->indexOid);
@@ -309,7 +309,7 @@ cluster_rel(RelToCluster *rvtc, bool recheck)
* definition can't change under us.
*/
void
-check_index_is_clusterable(Relation OldHeap, Oid indexOid)
+check_index_is_clusterable(Relation OldHeap, Oid indexOid, bool recheck)
{
Relation OldIndex;
@@ -336,7 +336,9 @@ check_index_is_clusterable(Relation OldHeap, Oid indexOid)
if (!heap_attisnull(OldIndex->rd_indextuple, Anum_pg_index_indpred))
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("cannot cluster on partial index")));
+ errmsg("cannot cluster on partial index \"%s\"",
+ RelationGetRelationName(OldIndex))));
+
if (!OldIndex->rd_am->amindexnulls)
{
AttrNumber colno;
@@ -354,21 +356,25 @@ check_index_is_clusterable(Relation OldHeap, Oid indexOid)
if (!OldHeap->rd_att->attrs[colno - 1]->attnotnull)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("cannot cluster when index access method does not handle null values"),
- errhint("You may be able to work around this by marking column \"%s\" NOT NULL.",
- NameStr(OldHeap->rd_att->attrs[colno - 1]->attname))));
+ errmsg("cannot cluster on index \"%s\" because access method\n"
+ "does not handle null values",
+ RelationGetRelationName(OldIndex)),
+ errhint("You may be able to work around this by marking column \"%s\" NOT NULL%s",
+ NameStr(OldHeap->rd_att->attrs[colno - 1]->attname),
+ recheck ? ",\nor use ALTER TABLE ... SET WITHOUT CLUSTER to remove the cluster\n"
+ "specification from the table." : ".")));
}
else if (colno < 0)
{
/* system column --- okay, always non-null */
}
else
- {
/* index expression, lose... */
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("cannot cluster on expressional index when index access method does not handle null values")));
- }
+ errmsg("cannot cluster on expressional index \"%s\" because its index access\n"
+ "method does not handle null values",
+ RelationGetRelationName(OldIndex))));
}
/*