diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c
index e5afa4167fd5d308298f4b0cff967f474f09215a..4bf737dcd3678a3dab98fff9ffa8d8c3f2734960 100644
--- a/src/backend/access/gist/gist.c
+++ b/src/backend/access/gist/gist.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.58 2000/06/15 03:31:53 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.59 2000/06/17 23:41:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -67,13 +67,12 @@ gistbuild(PG_FUNCTION_ARGS)
 	Relation		index = (Relation) PG_GETARG_POINTER(1);
 	int32			natts = PG_GETARG_INT32(2);
 	AttrNumber	   *attnum = (AttrNumber *) PG_GETARG_POINTER(3);
+	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(4);
+	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(5);
 #ifdef NOT_USED
-	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(4);
-	uint16			pcount = PG_GETARG_UINT16(5);
-	Datum		   *params = (Datum *) PG_GETARG_POINTER(6);
+	bool			unique = PG_GETARG_BOOL(6);
+	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(7);
 #endif
-	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(7);
-	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(8);
 	HeapScanDesc scan;
 	AttrNumber	i;
 	HeapTuple	htup;
diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c
index 043e0b891bc6357a2b818ed68726d966726afca3..9102b75f61b92ebe5f276c09f20e3d031f213638 100644
--- a/src/backend/access/hash/hash.c
+++ b/src/backend/access/hash/hash.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.39 2000/06/14 05:24:35 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.40 2000/06/17 23:41:13 tgl Exp $
  *
  * NOTES
  *	  This file contains only the public interface routines.
@@ -43,13 +43,12 @@ hashbuild(PG_FUNCTION_ARGS)
 	Relation		index = (Relation) PG_GETARG_POINTER(1);
 	int32			natts = PG_GETARG_INT32(2);
 	AttrNumber	   *attnum = (AttrNumber *) PG_GETARG_POINTER(3);
+	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(4);
+	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(5);
 #ifdef NOT_USED
-	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(4);
-	uint16			pcount = PG_GETARG_UINT16(5);
-	Datum		   *params = (Datum *) PG_GETARG_POINTER(6);
+	bool			unique = PG_GETARG_BOOL(6);
+	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(7);
 #endif
-	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(7);
-	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(8);
 	HeapScanDesc hscan;
 	HeapTuple	htup;
 	IndexTuple	itup;
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c
index 22b372d3a9f9e2528428b92ba2312d50c07a9ea6..59423ccb5f073e2a1b13414eeed0896aedba34f0 100644
--- a/src/backend/access/nbtree/nbtree.c
+++ b/src/backend/access/nbtree/nbtree.c
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.58 2000/06/15 04:09:36 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.59 2000/06/17 23:41:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,13 +47,12 @@ btbuild(PG_FUNCTION_ARGS)
 	Relation		index = (Relation) PG_GETARG_POINTER(1);
 	int32			natts = PG_GETARG_INT32(2);
 	AttrNumber	   *attnum = (AttrNumber *) PG_GETARG_POINTER(3);
+	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(4);
+	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(5);
+	bool			unique = PG_GETARG_BOOL(6);
 #ifdef NOT_USED
-	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(4);
-	uint16			pcount = PG_GETARG_UINT16(5);
-	Datum		   *params = (Datum *) PG_GETARG_POINTER(6);
+	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(7);
 #endif
-	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(7);
-	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(8);
 	HeapScanDesc hscan;
 	HeapTuple	htup;
 	IndexTuple	itup;
@@ -76,7 +75,6 @@ btbuild(PG_FUNCTION_ARGS)
 	Node	   *pred,
 			   *oldPred;
 	BTSpool    *spool = NULL;
-	bool		isunique;
 	bool		usefast;
 
 	/* note that this is a new btree */
@@ -98,9 +96,6 @@ btbuild(PG_FUNCTION_ARGS)
 		ResetUsage();
 #endif /* BTREE_BUILD_STATS */
 
-	/* see if index is unique */
-	isunique = IndexIsUniqueNoCache(RelationGetRelid(index));
-
 	/* initialize the btree index metadata page (if this is a new index) */
 	if (oldPred == NULL)
 		_bt_metapinit(index);
@@ -146,7 +141,7 @@ btbuild(PG_FUNCTION_ARGS)
 
 	if (usefast)
 	{
-		spool = _bt_spoolinit(index, isunique);
+		spool = _bt_spoolinit(index, unique);
 		res = (InsertIndexResult) NULL;
 	}
 
@@ -254,7 +249,7 @@ btbuild(PG_FUNCTION_ARGS)
 		if (usefast)
 			_bt_spool(btitem, spool);
 		else
-			res = _bt_doinsert(index, btitem, isunique, heap);
+			res = _bt_doinsert(index, btitem, unique, heap);
 
 		pfree(btitem);
 		pfree(itup);
diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c
index 513fcd8798b93c774cd660f5d337b8ae25b4b29c..7e84d456389981673914855cfcae7582367c12d4 100644
--- a/src/backend/access/rtree/rtree.c
+++ b/src/backend/access/rtree/rtree.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.49 2000/06/14 05:24:43 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.50 2000/06/17 23:41:22 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -66,13 +66,12 @@ rtbuild(PG_FUNCTION_ARGS)
 	Relation		index = (Relation) PG_GETARG_POINTER(1);
 	int32			natts = PG_GETARG_INT32(2);
 	AttrNumber	   *attnum = (AttrNumber *) PG_GETARG_POINTER(3);
+	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(4);
+	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(5);
 #ifdef NOT_USED
-	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(4);
-	uint16			pcount = PG_GETARG_UINT16(5);
-	Datum		   *params = (Datum *) PG_GETARG_POINTER(6);
+	bool			unique = PG_GETARG_BOOL(6);
+	IndexStrategy	istrat = (IndexStrategy) PG_GETARG_POINTER(7);
 #endif
-	FuncIndexInfo  *finfo = (FuncIndexInfo *) PG_GETARG_POINTER(7);
-	PredInfo	   *predInfo = (PredInfo *) PG_GETARG_POINTER(8);
 	HeapScanDesc scan;
 	AttrNumber	i;
 	HeapTuple	htup;
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index e8aa2a7402d3b0fe9c34bc8b3aa21822c7e81382..532d1bc3a82e1c0dc2e8102ca4cba59f3635cede 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.85 2000/06/05 07:28:40 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.86 2000/06/17 23:41:27 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -161,10 +161,9 @@ typedef struct _IndexList
 	char	   *il_ind;
 	int			il_natts;
 	AttrNumber *il_attnos;
-	uint16		il_nparams;
-	Datum	   *il_params;
 	FuncIndexInfo *il_finfo;
 	PredInfo   *il_predInfo;
+	bool		il_unique;
 	struct _IndexList *il_next;
 } IndexList;
 
@@ -1071,12 +1070,10 @@ index_register(char *heap,
 			   char *ind,
 			   int natts,
 			   AttrNumber *attnos,
-			   uint16 nparams,
-			   Datum *params,
 			   FuncIndexInfo *finfo,
-			   PredInfo *predInfo)
+			   PredInfo *predInfo,
+			   bool unique)
 {
-	Datum	   *v;
 	IndexList  *newind;
 	int			len;
 	MemoryContext oldcxt;
@@ -1103,25 +1100,12 @@ index_register(char *heap,
 		len = natts * sizeof(AttrNumber);
 
 	newind->il_attnos = (AttrNumber *) palloc(len);
-	memmove(newind->il_attnos, attnos, len);
+	memcpy(newind->il_attnos, attnos, len);
 
-	if ((newind->il_nparams = nparams) > 0)
-	{
-		v = newind->il_params = (Datum *) palloc(2 * nparams * sizeof(Datum));
-		nparams *= 2;
-		while (nparams-- > 0)
-		{
-			*v = (Datum) palloc(strlen((char *) (*params)) + 1);
-			strcpy((char *) *v++, (char *) *params++);
-		}
-	}
-	else
-		newind->il_params = (Datum *) NULL;
-
-	if (finfo != (FuncIndexInfo *) NULL)
+	if (PointerIsValid(finfo))
 	{
 		newind->il_finfo = (FuncIndexInfo *) palloc(sizeof(FuncIndexInfo));
-		memmove(newind->il_finfo, finfo, sizeof(FuncIndexInfo));
+		memcpy(newind->il_finfo, finfo, sizeof(FuncIndexInfo));
 	}
 	else
 		newind->il_finfo = (FuncIndexInfo *) NULL;
@@ -1135,6 +1119,8 @@ index_register(char *heap,
 	else
 		newind->il_predInfo = NULL;
 
+	newind->il_unique = unique;
+
 	newind->il_next = ILHead;
 
 	ILHead = newind;
@@ -1155,8 +1141,8 @@ build_indices()
 		ind = index_openr(ILHead->il_ind);
 		Assert(ind);
 		index_build(heap, ind, ILHead->il_natts, ILHead->il_attnos,
-				 ILHead->il_nparams, ILHead->il_params, ILHead->il_finfo,
-					ILHead->il_predInfo);
+					ILHead->il_finfo, ILHead->il_predInfo,
+					ILHead->il_unique);
 
 		/*
 		 * In normal processing mode, index_build would close the heap and
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 8423b54496e2fc945c6912b2051b878e907fd147..451eb7f7de2998f7bd2e213a630fd0ca9fff964e 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.131 2000/06/15 03:32:01 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.132 2000/06/17 23:41:31 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1112,6 +1112,7 @@ RelationTruncateIndexes(Relation heapRelation)
 	AttrNumber *attributeNumberA;
 	FuncIndexInfo fInfo,
 			   *funcInfo = NULL;
+	bool		unique;
 	int			i,
 				numberOfAttributes;
 	char	   *predString;
@@ -1134,6 +1135,7 @@ RelationTruncateIndexes(Relation heapRelation)
 		index = (Form_pg_index) GETSTRUCT(indexTuple);
 		indexId = index->indexrelid;
 		procId = index->indproc;
+		unique = index->indisunique;
 
 		for (i = 0; i < INDEX_MAX_KEYS; i++)
 		{
@@ -1201,7 +1203,7 @@ RelationTruncateIndexes(Relation heapRelation)
 		/* Initialize the index and rebuild */
 		InitIndexStrategy(numberOfAttributes, currentIndex, accessMethodId);
 		index_build(heapRelation, currentIndex, numberOfAttributes,
-					attributeNumberA, 0, NULL, funcInfo, predInfo);
+					attributeNumberA, funcInfo, predInfo, unique);
 
 		/*
 		 * index_build will close both the heap and index relations (but
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 755a7512723e695d9a061408de0f1d3085253c87..b18ae9af64ace594ed25be9e09908ce1907d1c15 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.117 2000/06/17 21:48:39 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.118 2000/06/17 23:41:34 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -72,9 +72,9 @@ static void UpdateIndexRelation(Oid indexoid, Oid heapoid,
 					AttrNumber *attNums, Oid *classOids, Node *predicate,
 		   List *attributeList, bool islossy, bool unique, bool primary);
 static void DefaultBuild(Relation heapRelation, Relation indexRelation,
-			 int numberOfAttributes, AttrNumber *attributeNumber,
-			 IndexStrategy indexStrategy, uint16 parameterCount,
-		Datum *parameter, FuncIndexInfoPtr funcInfo, PredInfo *predInfo);
+						 int numberOfAttributes, AttrNumber *attributeNumber,
+						 FuncIndexInfoPtr funcInfo, PredInfo *predInfo,
+						 bool unique, IndexStrategy indexStrategy);
 static Oid	IndexGetRelation(Oid indexId);
 static bool activate_index(Oid indexId, bool activate);
 
@@ -952,8 +952,6 @@ index_create(char *heapRelationName,
 			 int numatts,
 			 AttrNumber *attNums,
 			 Oid *classObjectId,
-			 uint16 parameterCount,
-			 Datum *parameter,
 			 Node *predicate,
 			 bool islossy,
 			 bool unique,
@@ -1086,13 +1084,13 @@ index_create(char *heapRelationName,
 	if (IsBootstrapProcessingMode())
 	{
 		index_register(heapRelationName, indexRelationName, numatts, attNums,
-					   parameterCount, parameter, funcInfo, predInfo);
+					   funcInfo, predInfo, unique);
 		/* XXX shouldn't we close the heap and index rels here? */
 	}
 	else
 	{
 		index_build(heapRelation, indexRelation, numatts, attNums,
-					parameterCount, parameter, funcInfo, predInfo);
+					funcInfo, predInfo, unique);
 	}
 }
 
@@ -1706,6 +1704,11 @@ FillDummyExprContext(ExprContext *econtext,
 
 /* ----------------
  *		DefaultBuild
+ *
+ * NB: this routine is dead code, and likely always has been, because
+ * there are no access methods that don't supply their own ambuild procedure.
+ *
+ * Anyone want to wager whether it would actually work if executed?
  * ----------------
  */
 static void
@@ -1713,11 +1716,10 @@ DefaultBuild(Relation heapRelation,
 			 Relation indexRelation,
 			 int numberOfAttributes,
 			 AttrNumber *attributeNumber,
-			 IndexStrategy indexStrategy,		/* not used */
-			 uint16 parameterCount,		/* not used */
-			 Datum *parameter,	/* not used */
 			 FuncIndexInfoPtr funcInfo,
-			 PredInfo *predInfo)
+			 PredInfo *predInfo,
+			 bool unique,		/* not used */
+			 IndexStrategy indexStrategy) /* not used */
 {
 	HeapScanDesc scan;
 	HeapTuple	heapTuple;
@@ -1925,10 +1927,9 @@ index_build(Relation heapRelation,
 			Relation indexRelation,
 			int numberOfAttributes,
 			AttrNumber *attributeNumber,
-			uint16 parameterCount,
-			Datum *parameter,
 			FuncIndexInfo *funcInfo,
-			PredInfo *predInfo)
+			PredInfo *predInfo,
+			bool unique)
 {
 	RegProcedure procedure;
 
@@ -1942,30 +1943,28 @@ index_build(Relation heapRelation,
 	procedure = indexRelation->rd_am->ambuild;
 
 	/* ----------------
-	 *	use the access method build procedure if supplied..
+	 *	use the access method build procedure if supplied, else default.
 	 * ----------------
 	 */
 	if (RegProcedureIsValid(procedure))
-		OidFunctionCall9(procedure,
+		OidFunctionCall8(procedure,
 						 PointerGetDatum(heapRelation),
 						 PointerGetDatum(indexRelation),
 						 Int32GetDatum(numberOfAttributes),
 						 PointerGetDatum(attributeNumber),
-						 PointerGetDatum(RelationGetIndexStrategy(indexRelation)),
-						 UInt16GetDatum(parameterCount),
-						 PointerGetDatum(parameter),
 						 PointerGetDatum(funcInfo),
-						 PointerGetDatum(predInfo));
+						 PointerGetDatum(predInfo),
+						 BoolGetDatum(unique),
+						 PointerGetDatum(RelationGetIndexStrategy(indexRelation)));
 	else
 		DefaultBuild(heapRelation,
 					 indexRelation,
 					 numberOfAttributes,
 					 attributeNumber,
-					 RelationGetIndexStrategy(indexRelation),
-					 parameterCount,
-					 parameter,
 					 funcInfo,
-					 predInfo);
+					 predInfo,
+					 unique,
+					 RelationGetIndexStrategy(indexRelation));
 }
 
 /*
@@ -2016,51 +2015,6 @@ IndexIsUnique(Oid indexId)
 	return index->indisunique;
 }
 
-/*
- * IndexIsUniqueNoCache: same as above function, but don't use the
- * system cache.  if we are called from btbuild, the transaction
- * that is adding the entry to pg_index has not been committed yet.
- * the system cache functions will do a heap scan, but only with
- * NowTimeQual, not SelfTimeQual, so it won't find tuples added
- * by the current transaction (which is good, because if the transaction
- * is aborted, you don't want the tuples sitting around in the cache).
- * so anyway, we have to do our own scan with SelfTimeQual.
- * this is only called when a new index is created, so it's OK
- * if it's slow.
- */
-bool
-IndexIsUniqueNoCache(Oid indexId)
-{
-	Relation	pg_index;
-	ScanKeyData skey[1];
-	HeapScanDesc scandesc;
-	HeapTuple	tuple;
-	Form_pg_index index;
-	bool		isunique;
-
-	pg_index = heap_openr(IndexRelationName, AccessShareLock);
-
-	ScanKeyEntryInitialize(&skey[0], (bits16) 0x0,
-						   Anum_pg_index_indexrelid,
-						   (RegProcedure) F_OIDEQ,
-						   ObjectIdGetDatum(indexId));
-
-	scandesc = heap_beginscan(pg_index, 0, SnapshotSelf, 1, skey);
-
-	/* NO CACHE */
-	tuple = heap_getnext(scandesc, 0);
-	if (!HeapTupleIsValid(tuple))
-		elog(ERROR, "IndexIsUniqueNoCache: can't find index id %u", indexId);
-
-	index = (Form_pg_index) GETSTRUCT(tuple);
-	Assert(index->indexrelid == indexId);
-	isunique = index->indisunique;
-
-	heap_endscan(scandesc);
-	heap_close(pg_index, AccessShareLock);
-	return isunique;
-}
-
 
 /* ---------------------------------
  * activate_index -- activate/deactivate the specified index.
@@ -2102,6 +2056,7 @@ reindex_index(Oid indexId, bool force)
 			   *funcInfo = NULL;
 	int			i,
 				numberOfAttributes;
+	bool		unique;
 	char	   *predString;
 	bool		old;
 
@@ -2121,6 +2076,7 @@ reindex_index(Oid indexId, bool force)
 	index = (Form_pg_index) GETSTRUCT(indexTuple);
 	heapId = index->indrelid;
 	procId = index->indproc;
+	unique = index->indisunique;
 
 	for (i = 0; i < INDEX_MAX_KEYS; i++)
 	{
@@ -2189,7 +2145,7 @@ reindex_index(Oid indexId, bool force)
 	/* Initialize the index and rebuild */
 	InitIndexStrategy(numberOfAttributes, iRel, accessMethodId);
 	index_build(heapRelation, iRel, numberOfAttributes,
-				attributeNumberA, 0, NULL, funcInfo, predInfo);
+				attributeNumberA, funcInfo, predInfo, unique);
 
 	/*
 	 * index_build will close both the heap and index relations (but not
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 88e0fa3568f8cd0a21b1ae7f15251b0fb0ddc076..0fff922545c0d98baff2f47394c96be1c0ea16d0 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.55 2000/06/15 03:32:07 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.56 2000/06/17 23:41:36 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -273,7 +273,6 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap)
 				 natts,
 				 Old_pg_index_Form->indkey,
 				 Old_pg_index_Form->indclass,
-				 (uint16) 0, (Datum *) NULL,
 				 (Node *) NULL,	/* XXX where's the predicate? */
 				 Old_pg_index_Form->indislossy,
 				 Old_pg_index_Form->indisunique,
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index f0d61aa112319f408f728c915118658097c24d62..e5896b304c7404a39b171948fab7d81a29e9c868 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.30 2000/06/17 21:48:42 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.31 2000/06/17 23:41:36 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -90,11 +90,9 @@ DefineIndex(char *heapRelationName,
 	int			numberOfAttributes;
 	AttrNumber *attributeNumberA;
 	HeapTuple	tuple;
-	uint16		parameterCount = 0;
-	Datum	   *parameterA = NULL;
 	FuncIndexInfo fInfo;
 	List	   *cnfPred = NULL;
-	bool		lossy = FALSE;
+	bool		lossy = false;
 	List	   *pl;
 
 	/*
@@ -198,7 +196,7 @@ DefineIndex(char *heapRelationName,
 		index_create(heapRelationName, indexRelationName,
 					 &fInfo, NULL,
 					 accessMethodId, numberOfAttributes, attributeNumberA,
-					 classObjectId, parameterCount, parameterA,
+					 classObjectId,
 					 (Node *) cnfPred,
 					 lossy, unique, primary);
 	}
@@ -216,7 +214,7 @@ DefineIndex(char *heapRelationName,
 		index_create(heapRelationName, indexRelationName,
 					 NULL, attributeList,
 					 accessMethodId, numberOfAttributes, attributeNumberA,
-					 classObjectId, parameterCount, parameterA,
+					 classObjectId,
 					 (Node *) cnfPred,
 					 lossy, unique, primary);
 	}
@@ -252,6 +250,7 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable)
 	HeapTuple	tuple;
 	FuncIndexInfo fInfo;
 	FuncIndexInfo *funcInfo = NULL;
+	bool		unique;
 	Form_pg_index index;
 	Node	   *oldPred = NULL;
 	List	   *cnfPred = NULL;
@@ -293,6 +292,7 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable)
 	Assert(index->indexrelid == indexId);
 	relationId = index->indrelid;
 	indproc = index->indproc;
+	unique = index->indisunique;
 
 	for (i = 0; i < INDEX_MAX_KEYS; i++)
 	{
@@ -366,7 +366,7 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable)
 	InitIndexStrategy(numberOfAttributes, indexRelation, accessMethodId);
 
 	index_build(heapRelation, indexRelation, numberOfAttributes,
-				attributeNumberA, 0, NULL, funcInfo, predInfo);
+				attributeNumberA, funcInfo, predInfo, unique);
 
 	/* heap and index rels are closed as a side-effect of index_build */
 }
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index 07269dcada1fae58301907f6131824d12dc31a0b..474f2616aa7f3454aa06f744cae5cc9bbe07a185 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.70 2000/06/15 06:07:34 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.71 2000/06/17 23:41:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -165,7 +165,7 @@ inv_create(int flags)
 	classObjectId[0] = INT4_OPS_OID;
 	index_create(objname, indname, NULL, NULL, BTREE_AM_OID,
 				 1, &attNums[0], &classObjectId[0],
-				 0, (Datum) NULL, NULL, FALSE, FALSE, FALSE);
+				 (Node *) NULL, false, false, false);
 
 	/* make the index visible in this transaction */
 	CommandCounterIncrement();
diff --git a/src/include/bootstrap/bootstrap.h b/src/include/bootstrap/bootstrap.h
index 63c9e1b1006bf8a79f00cda27a27e16810de51fe..b3ddea19d5078918d6179a2f6ce52ffbf46cbb70 100644
--- a/src/include/bootstrap/bootstrap.h
+++ b/src/include/bootstrap/bootstrap.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: bootstrap.h,v 1.17 2000/01/26 05:57:53 momjian Exp $
+ * $Id: bootstrap.h,v 1.18 2000/06/17 23:41:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,14 +34,11 @@ extern int	numattr;
 extern int	DebugMode;
 
 extern int	BootstrapMain(int ac, char *av[]);
-extern void index_register(char *heap,
-			   char *ind,
-			   int natts,
-			   AttrNumber *attnos,
-			   uint16 nparams,
-			   Datum *params,
-			   FuncIndexInfo *finfo,
-			   PredInfo *predInfo);
+
+extern void index_register(char *heap, char *ind,
+						   int natts, AttrNumber *attnos,
+						   FuncIndexInfo *finfo, PredInfo *predInfo,
+						   bool unique);
 
 extern void err_out(void);
 extern void InsertOneTuple(Oid objectid);
diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h
index 66021d6405c3d7211f4c99e91978eea4936e6403..15cfb21e21e83b35dea8ad8ad5147da6a156d316 100644
--- a/src/include/catalog/index.h
+++ b/src/include/catalog/index.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: index.h,v 1.24 2000/06/08 22:37:39 momjian Exp $
+ * $Id: index.h,v 1.25 2000/06/17 23:41:51 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -33,8 +33,6 @@ extern void index_create(char *heapRelationName,
 			 int numatts,
 			 AttrNumber *attNums,
 			 Oid *classObjectId,
-			 uint16 parameterCount,
-			 Datum *parameter,
 			 Node *predicate,
 			 bool islossy,
 			 bool unique,
@@ -57,12 +55,11 @@ extern void FillDummyExprContext(ExprContext *econtext, TupleTableSlot *slot,
 					 TupleDesc tupdesc, Buffer buffer);
 
 extern void index_build(Relation heapRelation, Relation indexRelation,
-			int numberOfAttributes, AttrNumber *attributeNumber,
-		uint16 parameterCount, Datum *parameter, FuncIndexInfo *funcInfo,
-			PredInfo *predInfo);
+						int numberOfAttributes, AttrNumber *attributeNumber,
+						FuncIndexInfo *funcInfo, PredInfo *predInfo,
+						bool unique);
 
 extern bool IndexIsUnique(Oid indexId);
-extern bool IndexIsUniqueNoCache(Oid indexId);
 
 extern bool reindex_index(Oid indexId, bool force);
 extern bool activate_indexes_of_a_table(Oid relid, bool activate);
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index acd920723925b2fd58d20a65d347cc5adfa92942..d32a2997994c6f89b35649aa746c22c8f1878e88 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.139 2000/06/13 07:35:19 tgl Exp $
+ * $Id: pg_proc.h,v 1.140 2000/06/17 23:41:51 tgl Exp $
  *
  * NOTES
  *	  The script catalog/genbki.sh reads this file and generates .bki
@@ -677,7 +677,7 @@ DATA(insert OID = 321 (  rtdelete		   PGUID 12 f t f t 2 f 23 "0 0" 100 0 0 100
 DESCR("r-tree(internal)");
 DATA(insert OID = 322 (  rtgettuple		   PGUID 12 f t f t 2 f 23 "0 0" 100 0 0 100  rtgettuple - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 323 (  rtbuild		   PGUID 12 f t f t 9 f 23 "0 0 0 0 0 0 0 0 0" 100 0 0 100  rtbuild - ));
+DATA(insert OID = 323 (  rtbuild		   PGUID 12 f t f t 8 f 23 "0 0 0 0 0 0 0 0" 100 0 0 100  rtbuild - ));
 DESCR("r-tree(internal)");
 DATA(insert OID = 324 (  rtbeginscan	   PGUID 12 f t f t 4 f 23 "0 0 0 0" 100 0 0 100  rtbeginscan - ));
 DESCR("r-tree(internal)");
@@ -706,7 +706,7 @@ DATA(insert OID = 336 (  btmarkpos		   PGUID 12 f t f t 1 f 23 "0" 100 0 0 100
 DESCR("btree(internal)");
 DATA(insert OID = 337 (  btrestrpos		   PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  btrestrpos - ));
 DESCR("btree(internal)");
-DATA(insert OID = 338 (  btbuild		   PGUID 12 f t f t 9 f 23 "0 0 0 0 0 0 0 0 0" 100 0 0 100  btbuild - ));
+DATA(insert OID = 338 (  btbuild		   PGUID 12 f t f t 8 f 23 "0 0 0 0 0 0 0 0" 100 0 0 100  btbuild - ));
 DESCR("btree(internal)");
 
 DATA(insert OID = 339 (  poly_same		   PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0  poly_same - ));
@@ -814,7 +814,7 @@ DATA(insert OID = 446 (  hashmarkpos	   PGUID 12 f t f t 1 f 23 "0" 100 0 0 100
 DESCR("hash(internal)");
 DATA(insert OID = 447 (  hashrestrpos	   PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  hashrestrpos - ));
 DESCR("hash(internal)");
-DATA(insert OID = 448 (  hashbuild		   PGUID 12 f t f t 9 f 23 "0 0 0 0 0 0 0 0 0" 100 0 0 100  hashbuild - ));
+DATA(insert OID = 448 (  hashbuild		   PGUID 12 f t f t 8 f 23 "0 0 0 0 0 0 0 0" 100 0 0 100  hashbuild - ));
 DESCR("hash(internal)");
 DATA(insert OID = 449 (  hashint2		   PGUID 12 f t t t 1 f 23 "21" 100 0 0 100  hashint2 - ));
 DESCR("hash");
@@ -1040,7 +1040,7 @@ DATA(insert OID = 780 (  gistmarkpos	   PGUID 12 f t f t 1 f 23 "0" 100 0 0 100
 DESCR("gist(internal)");
 DATA(insert OID = 781 (  gistrestrpos	   PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  gistrestrpos - ));
 DESCR("gist(internal)");
-DATA(insert OID = 782 (  gistbuild		   PGUID 12 f t f t 9 f 23 "0 0 0 0 0 0 0 0 0" 100 0 0 100  gistbuild - ));
+DATA(insert OID = 782 (  gistbuild		   PGUID 12 f t f t 8 f 23 "0 0 0 0 0 0 0 0" 100 0 0 100  gistbuild - ));
 DESCR("gist(internal)");
 
 DATA(insert OID = 784 (  tintervaleq	   PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100	tintervaleq - ));