Skip to content

Commit f6a54b8

Browse files
committed
Disallow CLUSTER using an invalid index (that is, one left over from a failed
CREATE INDEX CONCURRENTLY). Such an index might not have entries for every heap row and thus clustering with it would result in silent data loss. The scenario requires a pretty foolish DBA, but still ...
1 parent 34b44c3 commit f6a54b8

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/backend/commands/cluster.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.163 2007/09/10 21:59:37 alvherre Exp $
14+
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.164 2007/09/29 18:05:20 tgl Exp $
1515
*
1616
*-------------------------------------------------------------------------
1717
*/
@@ -421,6 +421,20 @@ check_index_is_clusterable(Relation OldHeap, Oid indexOid, bool recheck)
421421
RelationGetRelationName(OldIndex))));
422422
}
423423

424+
/*
425+
* Disallow if index is left over from a failed CREATE INDEX CONCURRENTLY;
426+
* it might well not contain entries for every heap row, or might not even
427+
* be internally consistent. (But note that we don't check indcheckxmin;
428+
* the worst consequence of following broken HOT chains would be that we
429+
* might put recently-dead tuples out-of-order in the new table, and there
430+
* is little harm in that.)
431+
*/
432+
if (!OldIndex->rd_index->indisvalid)
433+
ereport(ERROR,
434+
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
435+
errmsg("cannot cluster on invalid index \"%s\"",
436+
RelationGetRelationName(OldIndex))));
437+
424438
/*
425439
* Disallow clustering system relations. This will definitely NOT work
426440
* for shared relations (we have no way to update pg_class rows in other

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy