@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / backend / commands / cluster . c , v 1.163 2007 / 09 / 10 21 : 59 : 37 alvherre Exp $
* $ PostgreSQL : pgsql / src / backend / commands / cluster . c , v 1.164 2007 / 09 / 29 18 : 05 : 20 tgl Exp $
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
@ -421,6 +421,20 @@ check_index_is_clusterable(Relation OldHeap, Oid indexOid, bool recheck)
RelationGetRelationName ( OldIndex ) ) ) ) ;
}
/*
* Disallow if index is left over from a failed CREATE INDEX CONCURRENTLY ;
* it might well not contain entries for every heap row , or might not even
* be internally consistent . ( But note that we don ' t check indcheckxmin ;
* the worst consequence of following broken HOT chains would be that we
* might put recently - dead tuples out - of - order in the new table , and there
* is little harm in that . )
*/
if ( ! OldIndex - > rd_index - > indisvalid )
ereport ( ERROR ,
( errcode ( ERRCODE_FEATURE_NOT_SUPPORTED ) ,
errmsg ( " cannot cluster on invalid index \" %s \" " ,
RelationGetRelationName ( OldIndex ) ) ) ) ;
/*
* Disallow clustering system relations . This will definitely NOT work
* for shared relations ( we have no way to update pg_class rows in other