diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c
index 7fbf0ef07d3042257d1b6bb0ca46fc8ab0c3f3c4..5188c8bf90a75cf1cc79872c93391bd5ac0d0c25 100644
--- a/src/backend/access/gist/gist.c
+++ b/src/backend/access/gist/gist.c
@@ -292,7 +292,7 @@ gistbuild(Relation heap,
  *    It doesn't do any work; just locks the relation and passes the buck.
  */
 InsertIndexResult
-gistinsert(Relation r, Datum *datum, char *nulls, ItemPointer ht_ctid)
+gistinsert(Relation r, Datum *datum, char *nulls, ItemPointer ht_ctid, bool is_update)
 {
     InsertIndexResult res;
     IndexTuple itup;
diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c
index 0ab47a5cd8c4a3ad0c9f0524efdada29e850580a..973902c85cc2bb48ef146e01dea3f6683071a9af 100644
--- a/src/backend/access/hash/hash.c
+++ b/src/backend/access/hash/hash.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.10 1996/11/05 09:40:17 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.11 1996/11/13 20:46:48 scrappy Exp $
  *
  * NOTES
  *    This file contains only the public interface routines.
@@ -257,7 +257,7 @@ hashbuild(Relation heap,
  *  to the caller. 
  */
 InsertIndexResult
-hashinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid)
+hashinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid, bool is_update)
 {
     HashItem hitem;
     IndexTuple itup;
diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c
index dc354bdfaaf514493ec8e8d1e3de75539f418782..92b7d4236ef389c19d3c945b64300d46a8d131a7 100644
--- a/src/backend/access/index/indexam.c
+++ b/src/backend/access/index/indexam.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.7 1996/11/05 10:02:03 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.8 1996/11/13 20:46:59 scrappy Exp $
  *
  * INTERFACE ROUTINES
  *	index_open 	- open an index relation by relationId
@@ -164,7 +164,8 @@ InsertIndexResult
 index_insert(Relation relation,
 	     Datum *datum,
 	     char *nulls,
-	     ItemPointer heap_t_ctid)
+	     ItemPointer heap_t_ctid,
+	     bool is_update)
 {
     RegProcedure		procedure;
     InsertIndexResult		specificResult;
@@ -177,7 +178,7 @@ index_insert(Relation relation,
      * ----------------
      */
     specificResult = (InsertIndexResult)
-	fmgr(procedure, relation, datum, nulls, heap_t_ctid, NULL);
+	fmgr(procedure, relation, datum, nulls, heap_t_ctid, is_update, NULL);
     
     /* ----------------
      *	the insert proc is supposed to return a "specific result" and
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index 63e06f8e1e35f865357a741f77e76cab2bfba503..c1cedd33bdaaaef907a521f483ea24b495a767b6 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.6 1996/11/05 10:35:29 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.7 1996/11/13 20:47:11 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,7 +31,10 @@ static OffsetNumber _bt_findsplitloc(Relation rel, Page page, OffsetNumber start
 static void _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf);
 static OffsetNumber _bt_pgaddtup(Relation rel, Buffer buf, int keysz, ScanKey itup_scankey, Size itemsize, BTItem btitem, BTItem afteritem);
 static bool _bt_goesonpg(Relation rel, Buffer buf, Size keysz, ScanKey scankey, BTItem afteritem);
+
+#if 0
 static void _bt_updateitem(Relation rel, Size keysz, Buffer buf, Oid bti_oid, BTItem newItem);
+#endif
 
 /*
  *  _bt_doinsert() -- Handle insertion of a single btitem in the tree.
@@ -41,7 +44,7 @@ static void _bt_updateitem(Relation rel, Size keysz, Buffer buf, Oid bti_oid, BT
  *	(xid, seqno) pair.
  */
 InsertIndexResult
-_bt_doinsert(Relation rel, BTItem btitem)
+_bt_doinsert(Relation rel, BTItem btitem, bool index_is_unique, bool is_update)
 {
     ScanKey itup_scankey;
     IndexTuple itup;
@@ -59,6 +62,31 @@ _bt_doinsert(Relation rel, BTItem btitem)
     
     /* find the page containing this key */
     stack = _bt_search(rel, natts, itup_scankey, &buf);
+
+    /* if we're not allowing duplicates, make sure the key isn't */
+    /* already in the node */
+    if(index_is_unique && !is_update) {
+	OffsetNumber offset;
+	TupleDesc itupdesc;
+	Page page;
+
+	itupdesc = RelationGetTupleDescriptor(rel);
+	page = BufferGetPage(buf);
+
+	offset = _bt_binsrch(rel, buf, natts, itup_scankey, BT_DESCENT);
+
+	/* make sure the offset we're given points to an actual */
+	/* key on the page before trying to compare it */
+	if(!PageIsEmpty(page) &&
+	   offset <= PageGetMaxOffsetNumber(page)) {
+	    if(!_bt_compare(rel, itupdesc, page, 
+			    natts, itup_scankey, offset)) {
+		/* it is a duplicate */
+		elog(WARN, "Cannot insert a duplicate key into a unique index.");
+	    }
+	}
+    }
+
     blkno = BufferGetBlockNumber(buf);
     
     /* trade in our read lock for a write lock */
@@ -137,6 +165,10 @@ _bt_insertonpg(Relation rel,
     InsertIndexResult newres;
     BTItem new_item = (BTItem) NULL;
     BTItem lowLeftItem;
+    OffsetNumber leftmost_offset;
+    Page ppage;
+    BTPageOpaque ppageop;
+    BlockNumber bknum;
     
     page = BufferGetPage(buf);
     itemsz = IndexTupleDSize(btitem->bti_itup)
@@ -236,14 +268,67 @@ _bt_insertonpg(Relation rel,
 		lowLeftItem =
 		    (BTItem) PageGetItem(page,
 					 PageGetItemId(page, P_FIRSTKEY));
-		/* page must have right pointer after split */
-		_bt_updateitem(rel, keysz, pbuf, stack->bts_btitem->bti_oid,
-		               lowLeftItem);
+		
+		/* this method does not work--_bt_updateitem tries to     */
+		/* overwrite an entry with another entry that might be    */
+		/* bigger.  if lowLeftItem is bigger, it corrupts the     */
+		/* parent page.  instead, we have to delete the original  */
+		/* leftmost item from the parent, and insert the new one  */
+		/* with a regular _bt_insertonpg (it could cause a split  */
+		/* because it's bigger than what was there before).       */
+                /*                                  --djm 8/21/96         */
+
+		/* _bt_updateitem(rel, keysz, pbuf, stack->bts_btitem->bti_oid,
+		               lowLeftItem); */
+		
+		/* get the parent page */
+		ppage = BufferGetPage(pbuf);
+		ppageop = (BTPageOpaque) PageGetSpecialPointer(ppage);
+
+		/* figure out which key is leftmost (if the parent page   */
+		/* is rightmost, too, it must be the root)                */
+		if(P_RIGHTMOST(ppageop)) {
+		    leftmost_offset = P_HIKEY;
+		} else {
+		    leftmost_offset = P_FIRSTKEY;
 	    }
+       		PageIndexTupleDelete(ppage, leftmost_offset);
+		
+		/* don't write anything out yet--we still have the write  */
+		/* lock, and now we call another _bt_insertonpg to        */
+		/* insert the correct leftmost key                        */
+
+		/* make a new leftmost item, using the tuple data from    */
+		/* lowLeftItem.  point it to the left child.              */
+		/* update it on the stack at the same time.               */
+		bknum = BufferGetBlockNumber(buf);
+		pfree(stack->bts_btitem);
+		stack->bts_btitem = _bt_formitem(&(lowLeftItem->bti_itup));
+		ItemPointerSet(&(stack->bts_btitem->bti_itup.t_tid), 
+			       bknum, P_HIKEY);
+		
+		/* unlock the children before doing this */
+		_bt_relbuf(rel, buf, BT_WRITE);
+		_bt_relbuf(rel, rbuf, BT_WRITE);
+		
+		/* a regular _bt_binsrch should find the right place to   */
+		/* put the new entry, since it should be lower than any   */
+		/* other key on the page, therefore set afteritem to NULL */
+		newskey = _bt_mkscankey(rel, &(stack->bts_btitem->bti_itup));
+		newres = _bt_insertonpg(rel, pbuf, stack->bts_parent,
+					keysz, newskey, stack->bts_btitem,
+					NULL);
+
+		pfree(newres);
+		pfree(newskey);
 	    
-	    /* don't need the children anymore */
+		/* we have now lost our lock on the parent buffer, and    */
+		/* need to get it back.                                   */
+		pbuf = _bt_getstackbuf(rel, stack, BT_WRITE);
+	    } else {
 	    _bt_relbuf(rel, buf, BT_WRITE);
 	    _bt_relbuf(rel, rbuf, BT_WRITE);
+	    }
 	    
 	    newskey = _bt_mkscankey(rel, &(new_item->bti_itup));
 	    newres = _bt_insertonpg(rel, pbuf, stack->bts_parent,
@@ -787,6 +872,8 @@ _bt_itemcmp(Relation rel,
     return (true);
 }
 
+#if 0
+/* gone since updating in place doesn't work in general --djm 11/13/96 */
 /*
  *	_bt_updateitem() -- updates the key of the item identified by the
  *			    oid with the key of newItem (done in place if
@@ -804,9 +891,9 @@ _bt_updateitem(Relation rel,
     OffsetNumber maxoff;
     OffsetNumber i;
     ItemPointerData itemPtrData;
-    BTItem item, itemCopy;
+    BTItem item;
     IndexTuple oldIndexTuple, newIndexTuple;
-    int newSize, oldSize, first;
+    int first;
     
     page = BufferGetPage(buf);
     maxoff = PageGetMaxOffsetNumber(page);
@@ -825,48 +912,18 @@ _bt_updateitem(Relation rel,
 	elog(FATAL, "_bt_getstackbuf was lying!!");
     }
     
+    if(IndexTupleDSize(newItem->bti_itup) >
+       IndexTupleDSize(item->bti_itup)) {
+	elog(NOTICE, "trying to overwrite a smaller value with a bigger one in _bt_updateitem");
+	elog(WARN, "this is not good.");
+    }
+
     oldIndexTuple = &(item->bti_itup);
     newIndexTuple = &(newItem->bti_itup);
-    oldSize = DOUBLEALIGN(IndexTupleSize(oldIndexTuple));
-    newSize = DOUBLEALIGN(IndexTupleSize(newIndexTuple));
-#ifdef NBTINSERT_PATCH_DEBUG
-    printf("_bt_updateitem: newSize=%d, oldSize=%d\n", newSize, oldSize);
-#endif    
 
-    /*
-     * If new and old item have the same size do the update in place
-     * and return.
-     */ 
-    if (oldSize == newSize) {
 	/* keep the original item pointer */
 	ItemPointerCopy(&(oldIndexTuple->t_tid), &itemPtrData);
 	CopyIndexTuple(newIndexTuple, &oldIndexTuple);
 	ItemPointerCopy(&itemPtrData, &(oldIndexTuple->t_tid));
-	return;
-    }
-
-    /* 
-     * If new and old items have different size the update in place
-     * is not possible. In this case the old item is deleted and the
-     * new one is inserted.
-     * The new insertion should be done using _bt_insertonpg which
-     * would also takes care of the page splitting if needed, but
-     * unfortunately it doesn't work, so PageAddItem is used instead.
-     * There is the possibility that there is not enough space in the
-     * page and the item is not inserted.
-     */
-    itemCopy = palloc(newSize);
-    memmove((char *) itemCopy, (char *) newItem, newSize);
-    itemCopy->bti_oid = item->bti_oid;
-    newIndexTuple = &(itemCopy->bti_itup);
-    ItemPointerCopy(&(oldIndexTuple->t_tid), &(newIndexTuple->t_tid));
-
-    /*
-     * Get the offset number of the item then delete it and insert
-     * the new item in the same place.
-     */
-    i = OffsetNumberPrev(i);
-    PageIndexTupleDelete(page, i);
-    PageAddItem(page, (Item) itemCopy, newSize, i, LP_USED);
-    pfree(itemCopy);
 }
+#endif
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c
index b5248b23eb37c7f832da835980b801cd414af308..1aa75f402713caf2c69a6e9c04d0d1209d60d256 100644
--- a/src/backend/access/nbtree/nbtree.c
+++ b/src/backend/access/nbtree/nbtree.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.9 1996/11/05 10:35:32 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.10 1996/11/13 20:47:18 scrappy Exp $
  *
  * NOTES
  *    This file contains only the public interface routines.
@@ -74,6 +74,7 @@ btbuild(Relation heap,
     Oid hrelid, irelid;
     Node *pred, *oldPred;
     void *spool;
+    bool isunique;
     
     /* note that this is a new btree */
     BuildingBtree = true;
@@ -81,6 +82,9 @@ btbuild(Relation heap,
     pred = predInfo->pred;
     oldPred = predInfo->oldPred;
 
+    /* see if index is unique */
+    isunique = IndexIsUniqueNoCache(RelationGetRelationId(index));
+
     /* initialize the btree index metadata page (if this is a new index) */
     if (oldPred == NULL)
 	_bt_metapinit(index);
@@ -218,7 +222,7 @@ btbuild(Relation heap,
 	if (FastBuild) {
 	    _bt_spool(index, btitem, spool);
 	} else {
-	    res = _bt_doinsert(index, btitem);
+	    res = _bt_doinsert(index, btitem, isunique, false);
 	}
 
 	pfree(btitem);
@@ -289,7 +293,7 @@ btbuild(Relation heap,
  *	return an InsertIndexResult to the caller.
  */
 InsertIndexResult
-btinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid)
+btinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid, bool is_update)
 {
     BTItem btitem;
     IndexTuple itup;
@@ -304,7 +308,9 @@ btinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid)
     
     btitem = _bt_formitem(itup);
     
-    res = _bt_doinsert(rel, btitem);
+    res = _bt_doinsert(rel, btitem, 
+		       IndexIsUnique(RelationGetRelationId(rel)), is_update);
+
     pfree(btitem);
     pfree(itup);
     
diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c
index 2866e0264751cbcc476883c09271f9398b605179..d6658ea701e1fd8506d8f958b7cababd8a707879 100644
--- a/src/backend/access/nbtree/nbtsearch.c
+++ b/src/backend/access/nbtree/nbtsearch.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.8 1996/11/05 10:35:34 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.9 1996/11/13 20:47:20 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,7 +29,7 @@
 
 static BTStack _bt_searchr(Relation rel, int keysz, ScanKey scankey, Buffer *bufP, BTStack stack_in);
 static OffsetNumber _bt_firsteq(Relation rel, TupleDesc itupdesc, Page page, Size keysz, ScanKey scankey, OffsetNumber offnum);
-static int _bt_compare(Relation rel, TupleDesc itupdesc, Page page, int keysz, ScanKey scankey, OffsetNumber offnum);
+int _bt_compare(Relation rel, TupleDesc itupdesc, Page page, int keysz, ScanKey scankey, OffsetNumber offnum);
 static bool _bt_twostep(IndexScanDesc scan, Buffer *bufP, ScanDirection dir);
 static RetrieveIndexResult _bt_endpoint(IndexScanDesc scan, ScanDirection dir);
 
@@ -413,7 +413,7 @@ _bt_firsteq(Relation rel,
  *	a new minimal key is inserted, the leftmost entry on the leftmost
  *	page is less than all possible keys, by definition.
  */
-static int
+int
 _bt_compare(Relation rel,
 	    TupleDesc itupdesc,
 	    Page page,
diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c
index 6dfe3b7f37fc936f1bb88ca1113896cdffc9afb0..b851323d1078945203aec435a98aae6904d30096 100644
--- a/src/backend/access/rtree/rtree.c
+++ b/src/backend/access/rtree/rtree.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.9 1996/11/05 10:54:18 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.10 1996/11/13 20:47:35 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -277,7 +277,7 @@ rtbuild(Relation heap,
  *    It doesn't do any work; just locks the relation and passes the buck.
  */
 InsertIndexResult
-rtinsert(Relation r, Datum *datum, char *nulls, ItemPointer ht_ctid)
+rtinsert(Relation r, Datum *datum, char *nulls, ItemPointer ht_ctid, bool is_update)
 {
     InsertIndexResult res;
     IndexTuple itup;
diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y
index 43c75abee1136d4faade3f267359ef05c259afb6..c27eabe969f99755da0025c3c6b800ffe5d2243e 100644
--- a/src/backend/bootstrap/bootparse.y
+++ b/src/backend/bootstrap/bootparse.y
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.3 1996/10/21 08:31:18 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.4 1996/11/13 20:47:45 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -231,7 +231,7 @@ DeclareIndexStmt:
 		  DefineIndex(LexIDStr($5), 
 			      LexIDStr($3), 
 			      LexIDStr($7),
-			      params, NIL, 0, NIL);
+			      params, NIL, 0, 0, NIL);
 		  DO_END;
 		}
 	;
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index eefa44c72970ae5512eed1c6026332ad470718ee..14fc47700e5294468408cadfdc2002722ee896dc 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.8 1996/11/08 00:44:30 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.9 1996/11/13 20:47:53 scrappy Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -81,7 +81,7 @@ AppendAttributeTuples(Relation indexRelation, int numatts);
 static void UpdateIndexRelation(Oid indexoid, Oid heapoid,
 	FuncIndexInfo *funcInfo, int natts,
 	AttrNumber attNums[], Oid classOids[], Node *predicate,
-	TypeName *indexKeyType, bool islossy);
+	TypeName *indexKeyType, bool islossy, bool unique);
 static void DefaultBuild(Relation heapRelation, Relation indexRelation,
 	int numberOfAttributes, AttrNumber attributeNumber[],
 	IndexStrategy indexStrategy, uint16 parameterCount,
@@ -742,7 +742,8 @@ UpdateIndexRelation(Oid indexoid,
 		    Oid classOids[],
 		    Node *predicate,
 		    TypeName *indexKeyType,
-		    bool islossy)
+		    bool islossy,
+		    bool unique)
 {
     IndexTupleForm	indexForm;
     char		*predString;
@@ -779,6 +780,7 @@ UpdateIndexRelation(Oid indexoid,
     indexForm->indproc = (PointerIsValid(funcInfo)) ?
 	FIgetProcOid(funcInfo) : InvalidOid;
     indexForm->indislossy = islossy;
+    indexForm->indisunique = unique;
     if (indexKeyType != NULL)
         indexForm->indhaskeytype = 1;
     else
@@ -1008,7 +1010,8 @@ index_create(char *heapRelationName,
 	     uint16 parameterCount,
 	     Datum *parameter,
 	     Node *predicate,
- 	     bool islossy)
+ 	     bool islossy,
+	     bool unique)
 {
     Relation		heapRelation;
     Relation		indexRelation;
@@ -1122,7 +1125,7 @@ index_create(char *heapRelationName,
      */
     UpdateIndexRelation(indexoid, heapoid, funcInfo,
 			numatts, attNums, classObjectId, predicate,
-			IndexKeyType, islossy);
+			IndexKeyType, islossy, unique);
     
     predInfo = (PredInfo*)palloc(sizeof(PredInfo));
     predInfo->pred = predicate;
@@ -1594,7 +1597,7 @@ DefaultBuild(Relation heapRelation,
 	indexTuple->t_tid = heapTuple->t_ctid;
 	
 	insertResult = index_insert(indexRelation, datum, nullv, 
-				    &(heapTuple->t_ctid));
+				    &(heapTuple->t_ctid), false);
 
 	if (insertResult) pfree(insertResult);
 	pfree(indexTuple);
@@ -1678,4 +1681,70 @@ index_build(Relation heapRelation,
 		     predInfo);
 }
 
+/*
+ * IndexIsUnique: given an index's relation OID, see if it
+ * is unique using the system cache.
+ */
+bool
+IndexIsUnique(Oid indexId)
+{
+    HeapTuple tuple;
+    IndexTupleForm index;
+
+    tuple = SearchSysCacheTuple(INDEXRELID,
+				ObjectIdGetDatum(indexId),
+				0,0,0);
+    if(!HeapTupleIsValid(tuple)) {
+	elog(WARN, "Can't find index id %d in IndexIsUnique",
+	     indexId);
+    }
+    index = (IndexTupleForm)GETSTRUCT(tuple);
+    Assert(index->indexrelid == 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;
+    Buffer b;
+    IndexTupleForm index;
+    bool isunique;
+
+    pg_index = heap_openr(IndexRelationName);
+
+    ScanKeyEntryInitialize(&skey[0], (bits16)0x0,
+                           Anum_pg_index_indexrelid,
+                           (RegProcedure)ObjectIdEqualRegProcedure,
+                           ObjectIdGetDatum(indexId));
+
+    scandesc = heap_beginscan(pg_index, 0, SelfTimeQual, 1, skey);
+    
+    tuple = heap_getnext(scandesc, 0, &b);
+    if(!HeapTupleIsValid(tuple)) {
+	elog(WARN, "Can't find index id %d in IndexIsUniqueNoCache",
+	     indexId);
+    }
+    index = (IndexTupleForm)GETSTRUCT(tuple);
+    Assert(index->indexrelid == indexId);
+    isunique = index->indisunique;
+
+    ReleaseBuffer(b);
+    return isunique;
+}
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index 34603cb155b58d196867512c4de3b548530ce37e..a27496528c7a914a7be911e1f8f196cdf7981999 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.5 1996/11/11 14:02:10 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.6 1996/11/13 20:47:57 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -184,7 +184,7 @@ CatalogIndexInsert(Relation *idescs,
 			   finfoP);
 	    
 	    indexRes = index_insert(idescs[i], &datum, nulls, 
-				    &(heapTuple->t_ctid));
+				    &(heapTuple->t_ctid), false);
 	    if (indexRes) pfree(indexRes);
 	}
 }
diff --git a/src/backend/catalog/unused_oids b/src/backend/catalog/unused_oids
index 9608204f495e7580e242c49b7e6f9d475a63b55e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/backend/catalog/unused_oids
+++ b/src/backend/catalog/unused_oids
@@ -1,41 +0,0 @@
-#!/bin/sh
-# unused_oids
-#
-# $Header: /cvsroot/pgsql/src/backend/catalog/Attic/unused_oids,v 1.1.1.1 1996/07/09 06:21:18 scrappy Exp $
-#
-#	finds blocks of oids that have not already been claimed by 
-#	post_hackers for internal purposes.  primarily useful for
-#	finding valid oids for new internal function oids.  the numbers
-#	printed are inclusive ranges of valid (unused) oids.
-#
-#	before using a large empty block, make sure you aren't about
-#	to take over what was intended as expansion space for something
-#	else.  also, before using a number, do a "grepsrc" to make sure 
-#	that someone isn't using a literal numeric constant somewhere..
-#
-#	non-berkeley post_hackers should probably not try to use oids 
-#	less than the highest one that comes with the distributed source.
-#
-#	run this script in src/backend/catalog.
-#
-egrep '^DATA' pg_*.h | \
-	sed -e 's/^.*OID[^=]*=[^0-9]*//' -e 's/[^0-9].*$//' | \
-	sort -n | \
-	uniq | \
-	awk '
-BEGIN {
-	last = 0;
-}
-/^[0-9]/ {
-	if ($1 > last + 1) {
-		if ($1 > last + 2) {
-			print last + 1, "-", $1 - 1;
-		} else {
-			print last + 1;
-		}
-	}
-	last = $1;
-}
-END {
-	print last + 1, "-";
-}'
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 4d82e2c8645fcf27b1d7b689a86443174b89052c..3e8dcd549d273378ff6b217183302ec68a2de717 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.8 1996/11/06 08:21:29 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.9 1996/11/13 20:48:12 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -298,7 +298,9 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap)
 		 natts, 
 		 Old_pg_index_Form->indkey,
 		 Old_pg_index_Form->indclass,
-		 (uint16)0, (Datum) NULL, NULL, Old_pg_index_Form->indislossy);
+		 (uint16)0, (Datum) NULL, NULL, 
+		 Old_pg_index_Form->indislossy,
+		 Old_pg_index_Form->indisunique);
 
     heap_close(OldIndex);
     heap_close(NewHeap);
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 258376ee8bac3376a8797e314176e2bc0d69ff87..6777455be9f37862bf124fbfc0927182fec34efb 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.16 1996/11/10 02:59:34 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.17 1996/11/13 20:48:18 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -578,7 +578,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
                                index_nulls,
                                finfoP[i]);
                 indexRes = index_insert(index_rels[i], &idatum, index_nulls,
-                                        &(tuple->t_ctid));
+                                        &(tuple->t_ctid), false);
                 if (indexRes) pfree(indexRes);
             }
         }
diff --git a/src/backend/commands/defind.c b/src/backend/commands/defind.c
index cd1bbc147475b74165743339854b9aa0ebf78705..0618be3e20aa26ab7984599746179e52b39f6d93 100644
--- a/src/backend/commands/defind.c
+++ b/src/backend/commands/defind.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.8 1996/11/06 08:21:33 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.9 1996/11/13 20:48:22 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -69,6 +69,7 @@ DefineIndex(char *heapRelationName,
 	    char *accessMethodName,
 	    List *attributeList,
 	    List *parameterList,
+	    bool unique,
 	    Expr *predicate,
 	    List *rangetable)
 {
@@ -176,7 +177,7 @@ DefineIndex(char *heapRelationName,
 		     &fInfo, NULL, accessMethodId, 
 		     numberOfAttributes, attributeNumberA,
 		     classObjectId, parameterCount, parameterA, (Node*)cnfPred,
-		     lossy);
+		     lossy, unique);
     }else {
 	attributeNumberA =
 	    (AttrNumber *)palloc(numberOfAttributes *
@@ -192,7 +193,7 @@ DefineIndex(char *heapRelationName,
 		     ((IndexElem*)lfirst(attributeList))->tname,
 		     accessMethodId, numberOfAttributes, attributeNumberA,
 		     classObjectId, parameterCount, parameterA, (Node*)cnfPred,
-		     lossy);
+		     lossy, unique);
     }
 }
 
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index c5e26186087e7edce7480a348d973deec86c475c..6a562f8eaa54e88a624ce93fa54e794cca9a661a 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.8 1996/11/06 06:47:32 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.9 1996/11/13 20:48:28 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -918,7 +918,7 @@ ExecAppend(TupleTableSlot *slot,
      */
     numIndices = resultRelationInfo->ri_NumIndices;
     if (numIndices > 0) {
-	ExecInsertIndexTuples(slot, &(tuple->t_ctid), estate);
+	ExecInsertIndexTuples(slot, &(tuple->t_ctid), estate, false);
     }
 }
 
@@ -1056,8 +1056,9 @@ ExecReplace(TupleTableSlot *slot,
      *  the new tupleid stored there.
      * ----------------
      */
+
     numIndices = resultRelationInfo->ri_NumIndices;
     if (numIndices > 0) {
-	ExecInsertIndexTuples(slot, &(tuple->t_ctid), estate);
+	ExecInsertIndexTuples(slot, &(tuple->t_ctid), estate, true);
     }
 }
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index bd1e7968c91752f250ea2e1bdd34418bdabfa057..94e3a118a30a8bd6314b5f5db854d4c8332544bc 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.5 1996/11/10 02:59:49 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.6 1996/11/13 20:48:34 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1025,7 +1025,8 @@ ExecFormIndexTuple(HeapTuple heapTuple,
 void
 ExecInsertIndexTuples(TupleTableSlot *slot,
 		      ItemPointer tupleid,
-		      EState *estate)
+		      EState *estate,
+		      bool is_update)
 {
     HeapTuple			heapTuple;
     RelationInfo	        *resultRelationInfo;
@@ -1104,7 +1105,8 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
 	result = index_insert(relationDescs[i], /* index relation */
 			      datum,  /* array of heaptuple Datums */
 			      nulls, /* info on nulls */
- 			      &(heapTuple->t_ctid)); /* oid of heap tuple */
+ 			      &(heapTuple->t_ctid),
+			      is_update); /* oid of heap tuple */
 	
 	/* ----------------
 	 *	keep track of index inserts for debugging
@@ -1120,4 +1122,3 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
     }
     if (econtext != NULL) pfree(econtext);
 }
-
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index e61a13eab048c48e5a52adc81d212751286b8ffa..94e03a776d459409071ea6308904ae18c4a59ab5 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.3 1996/11/08 05:56:35 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.4 1996/11/13 20:48:46 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1407,6 +1407,34 @@ _copySortClause(SortClause *from)
     return newnode;
 }
 
+static A_Const *
+_copyAConst(A_Const *from)
+{
+    A_Const *newnode = makeNode(A_Const);
+
+    newnode->val = *((Value *)(copyObject(&(from->val))));
+    Node_Copy(from, newnode, typename);
+
+    return newnode;
+}
+
+static TypeName *
+_copyTypeName(TypeName *from)
+{
+    TypeName *newnode = makeNode(TypeName);
+
+    if(from->name) {
+	newnode->name = pstrdup(from->name);
+    } else {
+	from->name = (char *)0;
+    }
+    newnode->setof = from->setof;
+    Node_Copy(from, newnode, arrayBounds);
+    newnode->typlen = from->typlen;
+
+    return newnode;
+}
+
 static Query *
 _copyQuery(Query *from)
 {
@@ -1414,7 +1442,13 @@ _copyQuery(Query *from)
 
     newnode->commandType = from->commandType;
     newnode->resultRelation = from->resultRelation;
-    newnode->into = from->into;
+    /* probably should dup this string instead of just pointing */
+    /* to the old one  --djm */
+    if(from->into) {
+	newnode->into = pstrdup(from->into);
+    } else {
+	newnode->into = (char *)0;
+    }
     newnode->isPortal = from->isPortal;
     Node_Copy(from, newnode, rtable);
     if (from->utilityStmt && nodeTag(from->utilityStmt) == T_NotifyStmt) {
@@ -1643,6 +1677,12 @@ copyObject(void *from)
     case T_SortClause:
 	retval = _copySortClause(from);
 	break;
+    case T_A_Const:
+	retval = _copyAConst(from);
+	break;
+    case T_TypeName:
+	retval = _copyTypeName(from);
+	break;
 	
 	/*
 	 * VALUE NODES
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index b9c13dd7b95d483551ff0c447510477723af183e..874023c187293fb26780bd3102b54931128af6f4 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.14 1996/11/10 03:01:10 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.15 1996/11/13 20:48:55 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -77,6 +77,9 @@ static void AddAggToParseState(ParseState *pstate, Aggreg *aggreg);
 static void finalizeAggregates(ParseState *pstate, Query *qry);
 static void parseCheckAggregates(ParseState *pstate, Query *qry);
 
+static bool is_lowercase(char *string);
+static void make_lowercase(char *string);
+
 /*****************************************************************************
  *
  *****************************************************************************/
@@ -1869,6 +1872,30 @@ ParseComplexProjection(ParseState *pstate,
     return NULL;
 }
 		       
+static bool is_lowercase(char *string)
+{
+    int i;
+
+    for(i = 0; i < strlen(string); i++) {
+	if(string[i] >= 'A' && string[i] <= 'Z') {
+	    return false;
+	}
+    }
+
+    return true;
+}
+
+static void make_lowercase(char *string)
+{
+    int i;
+
+    for(i = 0; i < strlen(string); i++) {
+	if(string[i] >= 'A' && string[i] <= 'Z') {
+	    string[i] = (string[i] - 'A') + 'a';
+	}
+    }
+}
+		       
 static Node *
 ParseFunc(ParseState *pstate, char *funcname, List *fargs, int *curr_resno)
 {
@@ -1987,6 +2014,27 @@ ParseFunc(ParseState *pstate, char *funcname, List *fargs, int *curr_resno)
 
 		AddAggToParseState(pstate, aggreg);
 		return (Node*)aggreg;
+	    } else {
+		/* try one more time with lowercase --djm 8/17/96 */
+		if(!is_lowercase(funcname)) {
+		    char *lowercase_funcname = strdup(funcname);
+
+		    make_lowercase(lowercase_funcname);
+		    if (strcmp(lowercase_funcname, "count") == 0)
+		      basetype = 0;
+		    else
+		      basetype = exprType(lfirst(fargs));
+		    if (SearchSysCacheTuple(AGGNAME, 
+					    PointerGetDatum(lowercase_funcname), 
+					    ObjectIdGetDatum(basetype),
+					    0, 0)) {
+			Aggreg *aggreg = ParseAgg(lowercase_funcname, 
+						  basetype, lfirst(fargs));
+
+			AddAggToParseState(pstate, aggreg);
+			return (Node*)aggreg;
+		    }
+		}
 	    }
 	}
     }
diff --git a/src/backend/parser/catalog_utils.c b/src/backend/parser/catalog_utils.c
index dcc754c12baaa897266143fb92e0e202c5a17289..20206e01341cf96f8a02ca0ce441d2d6a9b28dc5 100644
--- a/src/backend/parser/catalog_utils.c
+++ b/src/backend/parser/catalog_utils.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.9 1996/11/10 03:01:23 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.10 1996/11/13 20:48:58 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -108,6 +108,9 @@ static Oid **argtype_inherit(int nargs, Oid *oid_array);
 static Oid **genxprod(InhPaths *arginh, int nargs);
 static int findsupers(Oid relid, Oid **supervec);
 
+static bool is_lowercase(char *string);
+static void make_lowercase(char *string);
+
 /* check to see if a type id is valid,
  * returns true if it is. By using this call before calling 
  * get_id_type or get_id_typname, more meaningful error messages
@@ -1010,6 +1013,30 @@ func_select_candidate(int nargs,
     return (NULL);
 }
 
+static bool is_lowercase(char *string)
+{
+    int i;
+
+    for(i = 0; i < strlen(string); i++) {
+	if(string[i] >= 'A' && string[i] <= 'Z') {
+	    return false;
+	}
+    }
+
+    return true;
+}
+
+static void make_lowercase(char *string)
+{
+    int i;
+
+    for(i = 0; i < strlen(string); i++) {
+	if(string[i] >= 'A' && string[i] <= 'Z') {
+	    string[i] = (string[i] - 'A') + 'a';
+	}
+    }
+}
+
 bool
 func_get_detail(char *funcname,
 		int nargs,
@@ -1105,6 +1132,24 @@ func_get_detail(char *funcname,
     if (!HeapTupleIsValid(ftup)) {
 	Type tp;
 
+	/*
+	 * everything else has failed--try converting the function
+	 * name to lowercase, and do everything one more time
+	 * (if it's not already lowercase).  so ODBC applications
+	 * that expect uppercase names to work can work.  --djm 8/17/96
+	 */
+	if(!is_lowercase(funcname)) {
+	    char *lowercase_funcname = strdup(funcname);
+	    bool result;
+
+	    make_lowercase(lowercase_funcname);
+	    result = func_get_detail(lowercase_funcname, nargs, oid_array,
+				     funcid, rettype, retset,	
+				     true_typeids);
+	    
+	    free(lowercase_funcname);
+	    return result;
+	} else {
 	if (nargs == 1) {
 	    tp = get_id_type(oid_array[0]);
 	    if (typetypetype(tp) == 'c')
@@ -1112,6 +1157,7 @@ func_get_detail(char *funcname,
 		     funcname);
 	}
 	func_error("func_get_detail", funcname, nargs, (int*)oid_array);
+	}
     } else {
 	pform = (Form_pg_proc) GETSTRUCT(ftup);
 	*funcid = ftup->t_oid;
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 1e599c9e65a0182de3fb4d89ac72e8fe58aedceb..c3abd74e42680af211d9c072f292af7506c094f4 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.15 1996/11/11 12:14:09 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.16 1996/11/13 20:49:00 scrappy Exp $
  *
  * HISTORY
  *    AUTHOR		DATE		MAJOR EVENT
@@ -114,7 +114,7 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
 	class, index_name, var_name, name, file_name, recipe_name
 
 %type <str>	opt_id, opt_portal_name,
-	before_clause, after_clause, all_Op, MathOp, opt_name, opt_unique
+	before_clause, after_clause, all_Op, MathOp, opt_name, opt_unique,
 	result, OptUseOp, opt_class, opt_range_start, opt_range_end,
 	SpecialRuleRelation
 
@@ -123,14 +123,14 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
 
 %type <list>	queryblock, relation_name_list, OptTableElementList,
 	tableElementList, OptInherit, definition,
-	opt_with_func, def_args, def_name_list, func_argtypes, 
+	opt_with, def_args, def_name_list, func_argtypes, 
 	oper_argtypes, OptStmtList, OptStmtBlock, opt_column_list, columnList,
 	sort_clause, sortby_list, index_params, 
 	name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
 	expr_list, attrs, res_target_list, res_target_list2, def_list,
 	opt_indirection, group_clause, groupby_list, explain_options
 
-%type <boolean>	opt_inh_star, opt_binary, opt_instead, opt_with_copy
+%type <boolean>	opt_inh_star, opt_binary, opt_instead, opt_with_copy, index_opt_unique
 
 %type <ival>	copy_dirn, archive_type, OptArchiveType, OptArchiveLocation, 
 	def_type, opt_direction, remove_type, opt_column, event
@@ -658,17 +658,18 @@ opt_portal_name: IN name			{ $$ = $2;}
  *  [where <qual>] is not supported anymore
  *****************************************************************************/
 
-IndexStmt:  CREATE INDEX index_name ON relation_name
-	    access_method_clause '(' index_params ')' opt_with_func
+IndexStmt:  CREATE index_opt_unique INDEX index_name ON relation_name
+	    access_method_clause '(' index_params ')' opt_with
 		{
 		    /* should check that access_method is valid,
 		       etc ... but doesn't */
 		    IndexStmt *n = makeNode(IndexStmt);
-		    n->idxname = $3;
-		    n->relname = $5;
-		    n->accessMethod = $6;
-		    n->indexParams = $8;
-		    n->withClause = $10;
+		    n->unique = $2;
+		    n->idxname = $4;
+		    n->relname = $6;
+		    n->accessMethod = $7;
+		    n->indexParams = $9;
+		    n->withClause = $11;
 		    n->whereClause = NULL;
 		    $$ = (Node *)n;
 		}
@@ -677,6 +678,11 @@ IndexStmt:  CREATE INDEX index_name ON relation_name
 access_method_clause:   USING access_method      { $$ = $2; }
 		      | /* empty -- 'btree' is default access method */
 						 { $$ = "btree"; }
+	;
+
+index_opt_unique: UNIQUE				 { $$ = TRUE; }
+		  | /*empty*/                            { $$ = FALSE; }
+	;
 
 /*****************************************************************************
  *
@@ -731,7 +737,7 @@ RecipeStmt:  EXECUTE RECIPE recipe_name
  *****************************************************************************/
 
 ProcedureStmt:  CREATE FUNCTION def_name def_args 
-		   RETURNS def_arg opt_with_func AS Sconst LANGUAGE Sconst
+		   RETURNS def_arg opt_with AS Sconst LANGUAGE Sconst
                 {
 		    ProcedureStmt *n = makeNode(ProcedureStmt);
 		    n->funcname = $3;
@@ -743,7 +749,7 @@ ProcedureStmt:  CREATE FUNCTION def_name def_args
 		    $$ = (Node *)n;
 		};
 
-opt_with_func:  WITH definition			{ $$ = $2; }
+opt_with:  WITH definition			{ $$ = $2; }
 	|  /* EMPTY */				{ $$ = NIL; }
 	;
 
diff --git a/src/backend/parser/keywords.c b/src/backend/parser/keywords.c
index 31c035d42a58ea45a2b97521a61f6f7aa03ef878..8c90f12fd82ba16cfbe4fa8bd79782c39f8c657f 100644
--- a/src/backend/parser/keywords.c
+++ b/src/backend/parser/keywords.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.3 1996/08/24 20:48:46 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.4 1996/11/13 20:49:04 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -130,6 +130,7 @@ static ScanKeyword ScanKeywords[] = {
 	{ "to",			TO		},
 	{ "transaction",	TRANSACTION	},
 	{ "type",		P_TYPE		},
+	{ "unique",             UNIQUE          },
 	{ "update",		UPDATE		},
 	{ "using",		USING		},
 	{ "vacuum",		VACUUM		},
diff --git a/src/backend/parser/parse_query.c b/src/backend/parser/parse_query.c
index d92cb195c7ffebfeac49d5ca2738c2c27c09748b..26769191484e1848096ba6151a6aae7ccf4eb729 100644
--- a/src/backend/parser/parse_query.c
+++ b/src/backend/parser/parse_query.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/Attic/parse_query.c,v 1.7 1996/11/08 00:56:17 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/Attic/parse_query.c,v 1.8 1996/11/13 20:49:05 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -651,7 +651,9 @@ make_const(Value *value)
 		elog(NOTICE,"unknown type : %d\n", nodeTag(value));
 
 	    /* null const */
-	    con = makeConst(0, 0, (Datum)NULL, TRUE, 0, FALSE);
+	    /* if we don't set a type here, things will break.      */
+	    /* so set it to type 'unknown'.                         */
+	    con = makeConst(UNKNOWNOID, 0, (Datum)NULL, TRUE, 0, FALSE);
 	    return con;
 	}
     }
diff --git a/src/backend/parser/parser.c b/src/backend/parser/parser.c
index 57e25a686328148dded21bd6b379e4a57aa74942..89bd5b56a70a119d487b922dcd667166ac340b58 100644
--- a/src/backend/parser/parser.c
+++ b/src/backend/parser/parser.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.10 1996/11/10 03:30:46 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.11 1996/11/13 20:49:07 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -216,36 +216,36 @@ parser_typecast(Value *expr, TypeName *typename, int typlen)
     
 #if 0 /* fix me */
     switch ( CInteger(lfirst(expr)) ) {
-    case 23: /* int4 */
+    case INT4OID: /* int4 */
 	const_string = (char *) palloc(256);
 	string_palloced = true;
 	sprintf(const_string,"%d", ((Const*)lnext(expr))->constvalue);
 	break;
 	
-    case 19: /* char16 */
+    case NAMEOID: /* char16 */
 	const_string = (char *) palloc(256);
 	string_palloced = true;
 	sprintf(const_string,"%s", ((Const*)lnext(expr))->constvalue);
 	break;
 	
-    case 18: /* char */
+    case CHAROID: /* char */
 	const_string = (char *) palloc(256);
 	string_palloced = true;
 	sprintf(const_string,"%c", ((Const)lnext(expr))->constvalue);
 	break;
 	
-    case 701:/* float8 */
+    case FLOAT8OID:/* float8 */
 	const_string = (char *) palloc(256);
 	string_palloced = true;
 	sprintf(const_string,"%f", ((Const)lnext(expr))->constvalue);
 	break;
 	
-    case 25: /* text */
+    case TEXTOID: /* text */
 	const_string = DatumGetPointer(((Const)lnext(expr))->constvalue);
 	const_string = (char *) textout((struct varlena *)const_string);
 	break;
 	
-    case 705: /* unknown */
+    case UNKNOWNOID: /* unknown */
         const_string = DatumGetPointer(((Const)lnext(expr))->constvalue);
         const_string = (char *) textout((struct varlena *)const_string);
         break;
@@ -312,25 +312,25 @@ parser_typecast2(Node *expr, int exprType, Type tp, int typlen)
     switch (exprType) {
       case 0: /* NULL */
 	break;
-    case 23: /* int4 */
+    case INT4OID: /* int4 */
 	const_string = (char *) palloc(256);
 	string_palloced = true;
 	sprintf(const_string,"%d",
 		(int) ((Const*)expr)->constvalue);
 	break;
-    case 19: /* char16 */
+    case NAMEOID: /* char16 */
 	const_string = (char *) palloc(256);
 	string_palloced = true;
 	sprintf(const_string,"%s",
 		(char*) ((Const*)expr)->constvalue);
 	break;
-    case 18: /* char */
+    case CHAROID: /* char */
 	const_string = (char *) palloc(256);
 	string_palloced = true;
 	sprintf(const_string,"%c",
 		(char) ((Const*)expr)->constvalue);
 	break;
-    case 700:	/* float4 */
+    case FLOAT4OID:	/* float4 */
 	{
 	    float32 floatVal = 
 		DatumGetFloat32(((Const*)expr)->constvalue);
@@ -339,7 +339,7 @@ parser_typecast2(Node *expr, int exprType, Type tp, int typlen)
 	    sprintf(const_string,"%f", *floatVal);
 	    break;
 	}
-    case 701:/* float8 */
+    case FLOAT8OID:/* float8 */
 	{
 	    float64 floatVal = 
 		DatumGetFloat64(((Const*)expr)->constvalue);
@@ -348,12 +348,12 @@ parser_typecast2(Node *expr, int exprType, Type tp, int typlen)
 	    sprintf(const_string,"%f", *floatVal);
 	    break;
 	}
-    case 25: /* text */
+    case TEXTOID: /* text */
 	const_string = 
 	    DatumGetPointer(((Const*)expr)->constvalue );
 	const_string = (char *) textout((struct varlena *)const_string);
 	break;
-    case 705: /* unknown */
+    case UNKNOWNOID: /* unknown */
         const_string =
 	    DatumGetPointer(((Const*)expr)->constvalue );
 	const_string = (char *) textout((struct varlena *)const_string);
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index bb649996010ca8691bf197456be2827f9990c359..243bdc28a35ffa623d697634c010ddd0bd0e5ab7 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.6 1996/11/10 03:02:36 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.7 1996/11/13 20:49:18 scrappy 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);
+		 0, (Datum) NULL, NULL, FALSE, FALSE);
 
     /* make the index visible in this transaction */
     CommandCounterIncrement();
@@ -1008,7 +1008,7 @@ inv_indextup(LargeObjectDesc *obj_desc, HeapTuple htup)
 
     n[0] = ' ';
     v[0] = Int32GetDatum(obj_desc->highbyte);
-    res = index_insert(obj_desc->index_r, &v[0], &n[0], &(htup->t_ctid));
+    res = index_insert(obj_desc->index_r, &v[0], &n[0], &(htup->t_ctid), false);
 
     if (res)
 	pfree(res);
diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c
index 2cfc21f5c17339a106b64b31de1fb3929a239e8b..55ef66afc577311e69292fac2131792bb620779b 100644
--- a/src/backend/storage/page/bufpage.c
+++ b/src/backend/storage/page/bufpage.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.3 1996/11/08 05:59:03 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.4 1996/11/13 20:49:29 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -105,9 +105,13 @@ PageGetItem(Page page, ItemId itemId)
     Item	item;
     
     Assert(PageIsValid(page));
-    Assert((*itemId).lp_flags & LP_USED);
+/*    Assert(itemId->lp_flags & LP_USED); */
+    if(!(itemId->lp_flags & LP_USED)) {
+	elog(NOTICE, "LP_USED assertion failed.  dumping core.");
+	abort();
+    }
     
-    item = (Item)(((char *)page) + (*itemId).lp_off);
+    item = (Item)(((char *)page) + itemId->lp_off);
     
     return (item);
 }
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index f7890deb7e90b5f6fc0498c944efc5483aab4ef5..26bb04d751ec8c26d3ea2ce4080edc1ec682b5fa 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.8 1996/11/11 04:54:54 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.9 1996/11/13 20:49:50 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -372,6 +372,7 @@ ProcessUtility(Node *parsetree,
 			stmt->accessMethod, /* am name */
 			stmt->indexParams, /* parameters */
 			stmt->withClause,
+			stmt->unique,
 			(Expr*)stmt->whereClause,
 			stmt->rangetable);
 	}
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 9aefc80f9abadb0ee5fcd7b58a73ac2d0e3b0bc9..aa3616390c45025f9214d39dc0f8ce37e2c7103f 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.4 1996/11/08 05:59:53 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.5 1996/11/13 20:50:04 scrappy Exp $
  *
  * Notes:
  *	XXX This needs to use exception.h to handle recovery when
@@ -901,6 +901,7 @@ SearchSysCache(struct catcache *cache,
 	    sd =  heap_beginscan(relation, 0, NowTimeQual,
 				 cache->cc_nkeys, cache->cc_skey);
 	    
+	    /* should this buffer be ReleaseBuffer'd?  --djm 8/20/96 */
 	    ntp = heap_getnext(sd, 0, &buffer);
 	    
 	    MemoryContextSwitchTo((MemoryContext)CacheCxt);
diff --git a/src/include/access/genam.h b/src/include/access/genam.h
index 7c7c3e10238a53b09f351be155b83fc69d21c8b2..81dadcadaca9af647a40e4dc173849a1355d8705 100644
--- a/src/include/access/genam.h
+++ b/src/include/access/genam.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: genam.h,v 1.4 1996/11/05 08:18:09 scrappy Exp $
+ * $Id: genam.h,v 1.5 1996/11/13 20:50:28 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,7 +27,8 @@ extern Relation index_openr(char *relationName);
 extern void index_close(Relation relation);
 extern InsertIndexResult index_insert(Relation relation,
 				      Datum *datum, char *nulls,
-				      ItemPointer heap_t_ctid);
+				      ItemPointer heap_t_ctid,
+				      bool is_update);
 extern void index_delete(Relation relation, ItemPointer indexItem);
 extern IndexScanDesc index_beginscan(Relation relation, bool scanFromEnd,
      uint16 numberOfKeys, ScanKey key);
diff --git a/src/include/access/gist.h b/src/include/access/gist.h
index f30432979c263262efa548df823888afbc69dfee..cd723e31f249d8e82aaf2d3c34012b4ddbc21f04 100644
--- a/src/include/access/gist.h
+++ b/src/include/access/gist.h
@@ -174,7 +174,7 @@ extern void gistbuild(Relation heap,
 	  FuncIndexInfo *finfo,
 	  PredInfo *predInfo);
 extern InsertIndexResult gistinsert(Relation r, Datum *datum,
-			char *nulls,ItemPointer ht_ctid);
+			char *nulls,ItemPointer ht_ctid, bool is_update);
 extern void _gistdump(Relation r);
 extern char *text_range_out(TXTRANGE *r);
 extern char *int_range_out(INTRANGE *r);
diff --git a/src/include/access/hash.h b/src/include/access/hash.h
index 34e2f64d9bb8f424097ac405f30bb7369438bf13..65e9a23a988a2935fbd782f178f570fbabdeded6 100644
--- a/src/include/access/hash.h
+++ b/src/include/access/hash.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: hash.h,v 1.4 1996/11/10 03:04:36 momjian Exp $
+ * $Id: hash.h,v 1.5 1996/11/13 20:50:31 scrappy Exp $
  *
  * NOTES
  *	modeled after Margo Seltzer's hash implementation for unix. 
@@ -255,7 +255,7 @@ extern void hashbuild(Relation heap, Relation index, int natts,
 	AttrNumber *attnum, IndexStrategy istrat, uint16 pcount,
 	Datum *params, FuncIndexInfo *finfo, PredInfo *predInfo);
 extern InsertIndexResult hashinsert(Relation rel, Datum *datum, char *nulls,
-				    ItemPointer ht_ctid);
+				    ItemPointer ht_ctid, bool is_update);
 extern char *hashgettuple(IndexScanDesc scan, ScanDirection dir);
 extern char *hashbeginscan(Relation rel, bool fromEnd, uint16 keysz,
 			   ScanKey scankey);
diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h
index 685546f827fff6525eccffdd83e7e7d22c4a88ba..c17ce47813c7057d17430d7d067aca2ecc72e64c 100644
--- a/src/include/access/nbtree.h
+++ b/src/include/access/nbtree.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: nbtree.h,v 1.3 1996/11/05 10:37:08 scrappy Exp $
+ * $Id: nbtree.h,v 1.4 1996/11/13 20:50:32 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -170,7 +170,10 @@ typedef BTStackData	*BTStack;
 /*
  * prototypes for functions in nbtinsert.c
  */
-extern InsertIndexResult _bt_doinsert(Relation rel, BTItem btitem);
+extern InsertIndexResult _bt_doinsert(Relation rel, BTItem btitem,
+				      bool index_is_unique, bool is_update);
+
+				/* default is to allow duplicates */
 extern bool _bt_itemcmp(Relation rel, Size keysz, BTItem item1, BTItem item2,
 			StrategyNumber strat);
 
@@ -200,7 +203,7 @@ extern void btbuild(Relation heap, Relation index, int natts,
 	AttrNumber *attnum, IndexStrategy istrat, uint16 pcount,
 	Datum *params, FuncIndexInfo *finfo, PredInfo *predInfo);
 extern InsertIndexResult btinsert(Relation rel, Datum *datum, char *nulls,
-				  ItemPointer ht_ctid);
+				  ItemPointer ht_ctid, bool is_update);
 extern char *btgettuple(IndexScanDesc scan, ScanDirection dir);
 extern char *btbeginscan(Relation rel, bool fromEnd, uint16 keysz,
 			 ScanKey scankey);
@@ -237,6 +240,7 @@ extern OffsetNumber _bt_binsrch(Relation rel, Buffer buf, int keysz,
 extern RetrieveIndexResult _bt_next(IndexScanDesc scan, ScanDirection dir);
 extern RetrieveIndexResult _bt_first(IndexScanDesc scan, ScanDirection dir);
 extern bool _bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir);
+extern int _bt_compare(Relation rel, TupleDesc itupdesc, Page page, int keysz, ScanKey scankey, OffsetNumber offnum);
 
 /*
  * prototypes for functions in nbtstrat.c
diff --git a/src/include/access/rtree.h b/src/include/access/rtree.h
index 4474790245b5854548dbcf5b4a62124efe146a4a..34ca36e10202dc24b04363dbf5085cbf92425311 100644
--- a/src/include/access/rtree.h
+++ b/src/include/access/rtree.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: rtree.h,v 1.3 1996/11/10 03:04:39 momjian Exp $
+ * $Id: rtree.h,v 1.4 1996/11/13 20:50:34 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -112,7 +112,7 @@ extern RetrieveIndexResult rtgettuple(IndexScanDesc s, ScanDirection dir);
  *	Defined in access/index-rtree/
  */
 extern InsertIndexResult rtinsert(Relation r, Datum *datum, char *nulls,
-			ItemPointer ht_ctid);
+			ItemPointer ht_ctid, bool is_update);
 extern char *rtdelete(Relation r, ItemPointer tid);
 
 extern RetrieveIndexResult rtgettuple(IndexScanDesc s, ScanDirection dir);
diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h
index e4497c616d332b433e3a904dd1a86553ca6df266..d5d5f8e55e27e059bf72e662dec6080c9c8c75b7 100644
--- a/src/include/catalog/index.h
+++ b/src/include/catalog/index.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: index.h,v 1.3 1996/11/05 08:18:24 scrappy Exp $
+ * $Id: index.h,v 1.4 1996/11/13 20:50:49 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -39,7 +39,8 @@ extern void index_create(char *heapRelationName,
 			 uint16 parameterCount,
 			 Datum *parameter, 
 			 Node *predicate,
-			 bool islossy);
+			 bool islossy,
+			 bool unique);
 
 extern void index_destroy(Oid indexId);
 
@@ -58,4 +59,7 @@ extern void index_build(Relation heapRelation, Relation indexRelation,
 	uint16 parameterCount, Datum *parameter, FuncIndexInfo *funcInfo,
 	PredInfo *predInfo);
 
+extern bool IndexIsUnique(Oid indexId);
+extern bool IndexIsUniqueNoCache(Oid indexId);
+
 #endif /* INDEX_H */
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index 6dea14a0f821a32df0de605982effc32a4e44665..63ee8988a61713f8f5642c61a168dc3e8027ef38 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amop.h,v 1.3 1996/11/06 10:29:18 scrappy Exp $
+ * $Id: pg_amop.h,v 1.4 1996/11/13 20:50:50 scrappy Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -229,7 +229,7 @@ DATA(insert OID = 0 (  403 1181 662 5 btreesel btreenpage ));
 
 DATA(insert OID = 0 (  403 430 645 1 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 430 646 2 btreesel btreenpage ));
-DATA(insert OID = 0 (  403 430 99 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 430 1267 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 430 648 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 430 647 5 btreesel btreenpage ));
 
@@ -443,7 +443,7 @@ DATA(insert OID = 0 (  404 408 462 5 btreesel btreenpage ));
 
 DATA(insert OID = 0 (  404 430 645 1 btreesel btreenpage ));
 DATA(insert OID = 0 (  404 430 646 2 btreesel btreenpage ));
-DATA(insert OID = 0 (  404 430 99 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 430 1267 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  404 430 648 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  404 430 647 5 btreesel btreenpage ));
 
@@ -520,7 +520,7 @@ DATA(insert OID = 0 (  405 408 414 1 hashsel hashnpage ));
 /*
  *  hash table char16_ops
  */
-DATA(insert OID = 0 (  405 430 99 1 hashsel hashnpage ));
+DATA(insert OID = 0 (  405 430 1267 1 hashsel hashnpage ));
 /*
  *  hash table name_ops
  */
diff --git a/src/include/catalog/pg_amproc.h b/src/include/catalog/pg_amproc.h
index 600d53c4ef06a218baa5aaa6ce65a492fc4aeff0..f76f9c7e8585d82fe63b51bb605d7d5e9ed33304 100644
--- a/src/include/catalog/pg_amproc.h
+++ b/src/include/catalog/pg_amproc.h
@@ -9,7 +9,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amproc.h,v 1.2 1996/10/31 09:47:17 scrappy Exp $
+ * $Id: pg_amproc.h,v 1.3 1996/11/13 20:50:52 scrappy Exp $
  *
  * NOTES
  *    the genbki.sh script reads this file and generates .bki
@@ -82,7 +82,7 @@ DATA(insert OID = 0 (403 406 689 1));
 DATA(insert OID = 0 (403 407 690 1));
 DATA(insert OID = 0 (403 408 691 1));
 DATA(insert OID = 0 (403 1181 359 1));
-DATA(insert OID = 0 (403 430 374 1));
+DATA(insert OID = 0 (403 430 1274 1));
 DATA(insert OID = 0 (403 431 360 1));
 DATA(insert OID = 0 (403 432 357 1));
 DATA(insert OID = 0 (403 435 928 1));
@@ -108,7 +108,7 @@ DATA(insert OID = 0 (404 406 689 1));
 DATA(insert OID = 0 (404 407 690 1));
 DATA(insert OID = 0 (404 408 691 1));
 DATA(insert OID = 0 (404 1181 359 1));
-DATA(insert OID = 0 (404 430 374 1));
+DATA(insert OID = 0 (404 430 1274 1));
 DATA(insert OID = 0 (404 431 360 1));
 DATA(insert OID = 0 (404 432 357 1));
 BKI_BEGIN
@@ -125,7 +125,7 @@ DATA(insert OID = 0 (405 406 692 1));
 DATA(insert OID = 0 (405 407 693 1));
 DATA(insert OID = 0 (405 408 694 1));
 DATA(insert OID = 0 (405 1181 455 1));
-DATA(insert OID = 0 (405 430 499 1));
+DATA(insert OID = 0 (405 430 1281 1));
 DATA(insert OID = 0 (405 431 456 1));
 DATA(insert OID = 0 (405 1076 1080 1));
 DATA(insert OID = 0 (405 1077 1081 1));
diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h
index f4aa9aac3fdcff34c7d82fe1c0a810ec4827fc5c..56d7bae7ee9ec0afa759c40cecc54ca3b3a8edff 100644
--- a/src/include/catalog/pg_attribute.h
+++ b/src/include/catalog/pg_attribute.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_attribute.h,v 1.3 1996/11/01 09:22:37 scrappy Exp $
+ * $Id: pg_attribute.h,v 1.4 1996/11/13 20:50:54 scrappy Exp $
  *
  * NOTES
  *    the genbki.sh script reads this file and generates .bki
@@ -158,342 +158,342 @@ typedef FormData_pg_attribute	*AttributeTupleForm;
  * ----------------
  */
 #define Schema_pg_type \
-{ 71l, {"typname"},      19l, 71l, 0l, 0l, NAMEDATALEN,  1, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typowner"},     26l, 71l, 0l, 0l,  4,  2, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typlen"},       21l, 71l, 0l, 0l,  2,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 71l, {"typprtlen"},    21l, 71l, 0l, 0l,  2,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 71l, {"typbyval"},     16l, 71l, 0l, 0l,  1,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 71l, {"typtype"},      18l, 71l, 0l, 0l,  1,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 71l, {"typisdefined"}, 16l, 71l, 0l, 0l,  1,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 71l, {"typdelim"},     18l, 71l, 0l, 0l,  1,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 71l, {"typrelid"},     26l, 71l, 0l, 0l,  4,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typelem"},      26l, 71l, 0l, 0l,  4, 10, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typinput"},     24l, 71l, 0l, 0l,  4, 11, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typoutput"},    24l, 71l, 0l, 0l,  4, 12, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typreceive"},   24l, 71l, 0l, 0l,  4, 13, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typsend"},      24l, 71l, 0l, 0l,  4, 14, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 71l, {"typalign"},     18l, 71l, 0l, 0l,  1, 15, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 71l, {"typdefault"},   25l, 71l, 0l, 0l, -1, 16, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }
+{ 1247l, {"typname"},      19l, 0l, 0l, 0l, NAMEDATALEN,  1, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typowner"},     26l, 0l, 0l, 0l,  4,  2, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typlen"},       21l, 0l, 0l, 0l,  2,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1247l, {"typprtlen"},    21l, 0l, 0l, 0l,  2,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1247l, {"typbyval"},     16l, 0l, 0l, 0l,  1,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1247l, {"typtype"},      18l, 0l, 0l, 0l,  1,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1247l, {"typisdefined"}, 16l, 0l, 0l, 0l,  1,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1247l, {"typdelim"},     18l, 0l, 0l, 0l,  1,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1247l, {"typrelid"},     26l, 0l, 0l, 0l,  4,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typelem"},      26l, 0l, 0l, 0l,  4, 10, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typinput"},     24l, 0l, 0l, 0l,  4, 11, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typoutput"},    24l, 0l, 0l, 0l,  4, 12, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typreceive"},   24l, 0l, 0l, 0l,  4, 13, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typsend"},      24l, 0l, 0l, 0l,  4, 14, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1247l, {"typalign"},     18l, 0l, 0l, 0l,  1, 15, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1247l, {"typdefault"},   25l, 0l, 0l, 0l, -1, 16, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }
 
-DATA(insert OID = 0 (  71 typname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typowner         26 0 0 0  4   2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typlen           21 0 0 0  2   3 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  71 typprtlen        21 0 0 0  2   4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  71 typbyval         16 0 0 0  1   5 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  71 typtype          18 0 0 0  1   6 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  71 typisdefined     16 0 0 0  1   7 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  71 typdelim         18 0 0 0  1   8 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  71 typrelid         26 0 0 0  4   9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typelem          26 0 0 0  4  10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typinput         26 0 0 0  4  11 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typoutput        26 0 0 0  4  12 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typreceive       26 0 0 0  4  13 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typsend          26 0 0 0  4  14 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 typalign         18 0 0 0  1  15 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  71 typdefault       25 0 0 0 -1  16 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  71 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  71 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  71 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1247 typname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typowner         26 0 0 0  4   2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typlen           21 0 0 0  2   3 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1247 typprtlen        21 0 0 0  2   4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1247 typbyval         16 0 0 0  1   5 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1247 typtype          18 0 0 0  1   6 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1247 typisdefined     16 0 0 0  1   7 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1247 typdelim         18 0 0 0  1   8 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1247 typrelid         26 0 0 0  4   9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typelem          26 0 0 0  4  10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typinput         26 0 0 0  4  11 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typoutput        26 0 0 0  4  12 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typreceive       26 0 0 0  4  13 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typsend          26 0 0 0  4  14 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 typalign         18 0 0 0  1  15 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1247 typdefault       25 0 0 0 -1  16 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1247 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1247 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1247 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
 
 /* ----------------
  *	pg_database
  * ----------------
  */
-DATA(insert OID = 0 (  88 datname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 datdba           26 0 0 0  4   2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 datpath          25 0 0 0 -1   3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  88 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  88 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  88 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1262 datname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 datdba           26 0 0 0  4   2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 datpath          25 0 0 0 -1   3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1262 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1262 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1262 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_demon
  * ----------------
  */
-DATA(insert OID = 0 (  76 demserid         26 0 0 0  4   1 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 demname          19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 demowner         26 0 0 0  4   3 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 demcode          24 0 0 0  4   4 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 demserid         26 0 0 0  4   1 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 demname          19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 demowner         26 0 0 0  4   3 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 demcode          24 0 0 0  4   4 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
 
-DATA(insert OID = 0 (  76 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  76 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  76 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  76 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1251 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1251 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1251 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1251 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_proc
  * ----------------
  */
 #define Schema_pg_proc \
-{ 81l, {"proname"},       19l, 81l, 0l, 0l, NAMEDATALEN,  1, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 81l, {"proowner"},      26l, 81l, 0l, 0l,  4,  2, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 81l, {"prolang"},       26l, 81l, 0l, 0l,  4,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 81l, {"proisinh"},      16l, 81l, 0l, 0l,  1,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 81l, {"proistrusted"},  16l, 81l, 0l, 0l,  1,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 81l, {"proiscachable"}, 16l, 81l, 0l, 0l,  1,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 81l, {"pronargs"},      21l, 81l, 0l, 0l,  2,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 81l, {"proretset"},     16l, 81l, 0l, 0l,  1,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 81l, {"prorettype"},    26l, 81l, 0l, 0l,  4,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 81l, {"proargtypes"},   30l, 81l, 0l, 0l, 32, 10, 0,   '\0', '\001', 0l, 0l, \
+{ 1255l, {"proname"},       19l, 0l, 0l, 0l, NAMEDATALEN,  1, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1255l, {"proowner"},      26l, 0l, 0l, 0l,  4,  2, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1255l, {"prolang"},       26l, 0l, 0l, 0l,  4,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1255l, {"proisinh"},      16l, 0l, 0l, 0l,  1,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1255l, {"proistrusted"},  16l, 0l, 0l, 0l,  1,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1255l, {"proiscachable"}, 16l, 0l, 0l, 0l,  1,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1255l, {"pronargs"},      21l, 0l, 0l, 0l,  2,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1255l, {"proretset"},     16l, 0l, 0l, 0l,  1,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1255l, {"prorettype"},    26l, 0l, 0l, 0l,  4,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1255l, {"proargtypes"},   30l, 0l, 0l, 0l, 32, 10, 0,   '\0', '\001', 0l, 0l, \
       -1l, '\0', 'i' }, \
-{ 81l, {"probyte_pct"},   23l, 81l, 0l, 0l,  4, 11, 0, '\001', '\001', 0l, 0l, \
+{ 1255l, {"probyte_pct"},   23l, 0l, 0l, 0l,  4, 11, 0, '\001', '\001', 0l, 0l, \
       -1l, '\0', 'i' }, \
-{ 81l, {"properbyte_cpu"},   23l, 81l, 0l, 0l,  4, 12, 0, '\001', '\001', 0l, 0l,      -1l, '\0', 'i' }, \
-{ 81l, {"propercall_cpu"},   23l, 81l, 0l, 0l,  4, 13, 0, '\001', '\001', 0l, 0l,      -1l, '\0', 'i' }, \
-{ 81l, {"prooutin_ratio"},   23l, 81l, 0l, 0l,  4, 14, 0, '\001', '\001', 0l, 0l,      -1l, '\0', 'i' }, \
-{ 81l, {"prosrc"},        25l, 81l, 0l, 0l, -1,  15, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 81l, {"probin"},        17l, 81l, 0l, 0l, -1,  16, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }
+{ 1255l, {"properbyte_cpu"},   23l, 0l, 0l, 0l,  4, 12, 0, '\001', '\001', 0l, 0l,      -1l, '\0', 'i' }, \
+{ 1255l, {"propercall_cpu"},   23l, 0l, 0l, 0l,  4, 13, 0, '\001', '\001', 0l, 0l,      -1l, '\0', 'i' }, \
+{ 1255l, {"prooutin_ratio"},   23l, 0l, 0l, 0l,  4, 14, 0, '\001', '\001', 0l, 0l,      -1l, '\0', 'i' }, \
+{ 1255l, {"prosrc"},        25l, 0l, 0l, 0l, -1,  15, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1255l, {"probin"},        17l, 0l, 0l, 0l, -1,  16, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }
 
-DATA(insert OID = 0 (  81 proname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 proowner         26 0 0 0  4   2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 prolang          26 0 0 0  4   3 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 proisinh         16 0 0 0  1   4 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  81 proistrusted     16 0 0 0  1   5 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  81 proiscachable    16 0 0 0  1   6 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  81 pronargs         21 0 0 0  2   7 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  81 proretset        16 0 0 0  1   8 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  81 prorettype       26 0 0 0  4   9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 proargtypes      30 0 0 0 32  10 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 probyte_pct      23 0 0 0  4  11 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 properbyte_cpu   23 0 0 0  4  12 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 propercall_cpu   23 0 0 0  4  13 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 prooutin_ratio   23 0 0 0  4  14 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 prosrc           25 0 0 0 -1  15 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 probin           17 0 0 0 -1  16 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  81 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 cmax             29 0 0 0  2 -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  81 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  81 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1255 proname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 proowner         26 0 0 0  4   2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 prolang          26 0 0 0  4   3 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 proisinh         16 0 0 0  1   4 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1255 proistrusted     16 0 0 0  1   5 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1255 proiscachable    16 0 0 0  1   6 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1255 pronargs         21 0 0 0  2   7 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1255 proretset        16 0 0 0  1   8 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1255 prorettype       26 0 0 0  4   9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 proargtypes      30 0 0 0 32  10 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 probyte_pct      23 0 0 0  4  11 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 properbyte_cpu   23 0 0 0  4  12 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 propercall_cpu   23 0 0 0  4  13 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 prooutin_ratio   23 0 0 0  4  14 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 prosrc           25 0 0 0 -1  15 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 probin           17 0 0 0 -1  16 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1255 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 cmax             29 0 0 0  2 -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1255 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1255 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_server
  * ----------------
  */
-DATA(insert OID = 0 (  82 sername          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 serpid           21 0 0 0  2   2 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  82 serport          21 0 0 0  2   3 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  82 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  82 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  82 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  82 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1257 sername          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 serpid           21 0 0 0  2   2 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1257 serport          21 0 0 0  2   3 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1257 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1257 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1257 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1257 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_user
  * ----------------
  */
-DATA(insert OID = 0 (  86 usename          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 usesysid         23 0 0 0  4   2 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  86 usecreatedb      16 0 0 0  1   3 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  86 usetrace         16 0 0 0  1   4 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  86 usesuper         16 0 0 0  1   5 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  86 usecatupd        16 0 0 0  1   6 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  86 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  86 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  86 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  86 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1260 usename          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 usesysid         23 0 0 0  4   2 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1260 usecreatedb      16 0 0 0  1   3 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1260 usetrace         16 0 0 0  1   4 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1260 usesuper         16 0 0 0  1   5 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1260 usecatupd        16 0 0 0  1   6 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1260 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1260 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1260 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1260 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
 
 /* ----------------
  *	pg_group
  * ----------------
  */
-DATA(insert OID = 0 (  87 groname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 grosysid         23 0 0 0  4   2 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  87 grolist        1007 0 0 0 -1   3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  87 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  87 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  87 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1261 groname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 grosysid         23 0 0 0  4   2 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1261 grolist        1007 0 0 0 -1   3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1261 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1261 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1261 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_attribute
  * ----------------
  */
 #define Schema_pg_attribute \
-{ 75l, {"attrelid"},    26l, 75l, 0l, 0l,  4,  1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"attname"},     19l, 75l, 0l, 0l, NAMEDATALEN,  2, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"atttypid"},    26l, 75l, 0l, 0l,  4,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"attdefrel"},   26l, 75l, 0l, 0l,  4,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"attnvals"},    23l, 75l, 0l, 0l,  4,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"atttyparg"},   26l, 75l, 0l, 0l,  4,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"attlen"},      21l, 75l, 0l, 0l,  2,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 75l, {"attnum"},      21l, 75l, 0l, 0l,  2,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 75l, {"attbound"},    21l, 75l, 0l, 0l,  2,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 75l, {"attbyval"},    16l, 75l, 0l, 0l,  1, 10, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 75l, {"attcanindex"}, 16l, 75l, 0l, 0l,  1, 11, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 75l, {"attproc"},     26l, 75l, 0l, 0l,  4, 12, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"attnelems"},   23l, 75l, 0l, 0l,  4, 13, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"attcacheoff"}, 23l, 75l, 0l, 0l,  4, 14, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 75l, {"attisset"},    16l, 75l, 0l, 0l,  1, 15, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 75l, {"attalign"},    18l, 75l, 0l, 0l,  1, 16, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }
+{ 1249l, {"attrelid"},    26l, 0l, 0l, 0l,  4,  1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"attname"},     19l, 0l, 0l, 0l, NAMEDATALEN,  2, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"atttypid"},    26l, 0l, 0l, 0l,  4,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"attdefrel"},   26l, 0l, 0l, 0l,  4,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"attnvals"},    23l, 0l, 0l, 0l,  4,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"atttyparg"},   26l, 0l, 0l, 0l,  4,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"attlen"},      21l, 0l, 0l, 0l,  2,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1249l, {"attnum"},      21l, 0l, 0l, 0l,  2,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1249l, {"attbound"},    21l, 0l, 0l, 0l,  2,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1249l, {"attbyval"},    16l, 0l, 0l, 0l,  1, 10, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1249l, {"attcanindex"}, 16l, 0l, 0l, 0l,  1, 11, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1249l, {"attproc"},     26l, 0l, 0l, 0l,  4, 12, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"attnelems"},   23l, 0l, 0l, 0l,  4, 13, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"attcacheoff"}, 23l, 0l, 0l, 0l,  4, 14, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1249l, {"attisset"},    16l, 0l, 0l, 0l,  1, 15, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1249l, {"attalign"},    18l, 0l, 0l, 0l,  1, 16, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }
 
-DATA(insert OID = 0 (  75 attrelid         26 0 0 0  4   1 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 attname          19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 atttypid         26 0 0 0  4   3 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 attdefrel        26 0 0 0  4   4 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 attnvals         23 0 0 0  4   5 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 atttyparg        26 0 0 0  4   6 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 attlen           21 0 0 0  2   7 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  75 attnum           21 0 0 0  2   8 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  75 attbound         21 0 0 0  2   9 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  75 attbyval         16 0 0 0  1  10 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  75 attcanindex      16 0 0 0  1  11 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  75 attproc          26 0 0 0  4  12 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 attnelems        23 0 0 0  4  13 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 attcacheoff      23 0 0 0  4  14 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 attisset         16 0 0 0  1  15 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  75 attalign         18 0 0 0  1  16 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  75 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  75 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  75 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  75 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1249 attrelid         26 0 0 0  4   1 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 attname          19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 atttypid         26 0 0 0  4   3 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 attdefrel        26 0 0 0  4   4 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 attnvals         23 0 0 0  4   5 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 atttyparg        26 0 0 0  4   6 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 attlen           21 0 0 0  2   7 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1249 attnum           21 0 0 0  2   8 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1249 attbound         21 0 0 0  2   9 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1249 attbyval         16 0 0 0  1  10 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1249 attcanindex      16 0 0 0  1  11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1249 attproc          26 0 0 0  4  12 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 attnelems        23 0 0 0  4  13 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 attcacheoff      23 0 0 0  4  14 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 attisset         16 0 0 0  1  15 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1249 attalign         18 0 0 0  1  16 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1249 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1249 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1249 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1249 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_class
  * ----------------
  */
 #define Schema_pg_class \
-{ 83l, {"relname"},      19l,  83l, 0l, 0l, NAMEDATALEN,  1, 0,   '\000', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"reltype"},      26l,  83l, 0l, 0l,  4,  2, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relowner"},     26l,  83l, 0l, 0l,  4,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relam"},        26l,  83l, 0l, 0l,  4,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relpages"},     23,   83l, 0l, 0l,  4,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"reltuples"},    23,   83l, 0l, 0l,  4,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relexpires"},   702,  83l, 0l, 0l,  4,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relpreserved"}, 703,  83l, 0l, 0l,  4,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relhasindex"},  16,   83l, 0l, 0l,  1,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 83l, {"relisshared"},  16,   83l, 0l, 0l,  1, 10, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 83l, {"relkind"},      18,   83l, 0l, 0l,  1, 11, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 83l, {"relarch"},      18,   83l, 0l, 0l,  1, 12, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 83l, {"relnatts"},     21,   83l, 0l, 0l,  2, 13, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 83l, {"relsmgr"},      210l, 83l, 0l, 0l,  2, 14, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
-{ 83l, {"relkey"},       22,   83l, 0l, 0l, 16, 15, 0, '\000', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relkeyop"},     30,   83l, 0l, 0l, 32, 16, 0, '\000', '\001', 0l, 0l, -1l, '\0', 'i' }, \
-{ 83l, {"relhasrules"},  16,   83l, 0l, 0l,  1, 17, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
-{ 83l, {"relacl"},     1034l,  83l, 0l, 0l, -1, 18, 0, '\000', '\001', 0l, 0l, -1l, '\0', 'i' }
+{ 1259l, {"relname"},      19l, 0l, 0l, 0l, NAMEDATALEN,  1, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"reltype"},     26l, 0l, 0l, 0l,  4,  2, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relowner"},     26l, 0l, 0l, 0l,  4,  2, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relam"},        26l, 0l, 0l, 0l,  4,  3, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relpages"},     23,  0l, 0l, 0l,  4,  4, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"reltuples"},    23,  0l, 0l, 0l,  4,  5, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relexpires"},   702,  0l, 0l, 0l,  4,  6, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relpreserved"}, 703,  0l, 0l, 0l,  4,  7, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relhasindex"},  16,  0l, 0l, 0l,  1,  8, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1259l, {"relisshared"},  16,  0l, 0l, 0l,  1,  9, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1259l, {"relkind"},      18,  0l, 0l, 0l,  1, 10, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1259l, {"relarch"},      18,  0l, 0l, 0l,  1, 11, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1259l, {"relnatts"},     21,  0l, 0l, 0l,  2, 12, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1259l, {"relsmgr"},      210l,  0l, 0l, 0l,  2, 13, 0, '\001', '\001', 0l, 0l, -1l, '\0', 's' }, \
+{ 1259l, {"relkey"},       22,  0l, 0l, 0l, 16, 14, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relkeyop"},     30,  0l, 0l, 0l, 32, 15, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }, \
+{ 1259l, {"relhasrules"},  16,  0l, 0l, 0l,  1, 16, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'c' }, \
+{ 1259l, {"relacl"},     1034l, 0l, 0l, 0l, -1, 17, 0,   '\0', '\001', 0l, 0l, -1l, '\0', 'i' }
 
-DATA(insert OID = 0 (  83 relname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 reltype          26 0 0 0  4   2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relowner         26 0 0 0  4   3 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relam            26 0 0 0  4   4 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relpages         23 0 0 0  4   5 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 reltuples        23 0 0 0  4   6 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relexpires      702 0 0 0  4   7 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relpreserved    703 0 0 0  4   8 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relhasindex      16 0 0 0  1   9 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  83 relisshared      16 0 0 0  1  10 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  83 relkind          18 0 0 0  1  11 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  83 relarch          18 0 0 0  1  12 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  83 relnatts         21 0 0 0  2  13 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  83 relsmgr         210 0 0 0  2  14 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  83 relkey           22 0 0 0 16  15 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relkeyop         30 0 0 0 32  16 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 relhasrules      16 0 0 0  1  17 0 t t 0 0 -1 f c));
-DATA(insert OID = 0 (  83 relacl         1034 0 0 0 -1  18 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  83 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  83 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  83 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1259 relname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 reltype          26 0 0 0  4   2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relowner         26 0 0 0  4   2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relam            26 0 0 0  4   3 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relpages         23 0 0 0  4   4 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 reltuples        23 0 0 0  4   5 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relexpires      702 0 0 0  4   6 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relpreserved    702 0 0 0  4   7 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relhasindex      16 0 0 0  1   8 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1259 relisshared      16 0 0 0  1   9 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1259 relkind          18 0 0 0  1  10 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1259 relarch          18 0 0 0  1  11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1259 relnatts         21 0 0 0  2  12 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1259 relsmgr         210 0 0 0  2  13 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1259 relkey           22 0 0 0 16  14 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relkeyop         30 0 0 0 32  15 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 relhasrules      16 0 0 0  1  16 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1259 relacl         1034 0 0 0 -1  17 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1259 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1259 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1259 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_magic
  * ----------------
  */
-DATA(insert OID = 0 (  80 magname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 magvalue         19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  80 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  80 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  80 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1253 magname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 magvalue         19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1253 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1253 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1253 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 /* ----------------
  *	pg_defaults
  * ----------------
  */
-DATA(insert OID = 0 (  89 defname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 defvalue         19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  89 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
-DATA(insert OID = 0 (  89 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
-DATA(insert OID = 0 (  89 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
+DATA(insert OID = 0 ( 1263 defname          19 0 0 0 NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 defvalue         19 0 0 0 NAMEDATALEN   2 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 ctid             27 0 0 0  6  -1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 oid              26 0 0 0  4  -2 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 xmin             28 0 0 0  4  -3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 cmin             29 0 0 0  2  -4 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1263 xmax             28 0 0 0  4  -5 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 cmax             29 0 0 0  2  -6 0 t t 0 0 -1 f s));
+DATA(insert OID = 0 ( 1263 chain            27 0 0 0  6  -7 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 anchor           27 0 0 0  6  -8 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 tmax            702 0 0 0  4  -9 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 tmin            702 0 0 0  4 -10 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1263 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
     
 
 /* ----------------
@@ -502,9 +502,9 @@ DATA(insert OID = 0 (  89 vtype            18 0 0 0  1 -11 0 t t 0 0 -1 f c));
  *		  
  * ----------------
  */
-DATA(insert OID = 0 (  101 dbName           19 0 0 0  NAMEDATALEN   1 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  101 address           25 0 0 0  -1   2 0 f t 0 0 -1 f i));
-DATA(insert OID = 0 (  101 mask           25 0 0 0  -1   3 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1273 dbName           19 0 0 0  NAMEDATALEN   1 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1273 address           25 0 0 0  -1   2 0 f t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1273 mask           25 0 0 0  -1   3 0 f t 0 0 -1 f i));
 
 /* ----------------
  *	pg_variable - this relation is modified by special purpose access
@@ -513,9 +513,9 @@ DATA(insert OID = 0 (  101 mask           25 0 0 0  -1   3 0 f t 0 0 -1 f i));
  * ----------------
  */
 #define Schema_pg_variable \
-{ 90l, {"varfoo"},  26l, 90l, 0l, 0l, 4, 1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }
+{ 1264l, {"varfoo"},  26l, 0l, 0l, 0l, 4, 1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }
     
-DATA(insert OID = 0 (  90 varfoo           26 0 0 0  4   1 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1264 varfoo           26 0 0 0  4   1 0 t t 0 0 -1 f i));
     
 /* ----------------
  *	pg_log - this relation is modified by special purpose access
@@ -524,9 +524,9 @@ DATA(insert OID = 0 (  90 varfoo           26 0 0 0  4   1 0 t t 0 0 -1 f i));
  * ----------------
  */
 #define Schema_pg_log \
-{ 99l, {"logfoo"},  26l, 99l, 0l, 0l, 4, 1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }
+{ 1269l, {"logfoo"},  26l, 0l, 0l, 0l, 4, 1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }
 
-DATA(insert OID = 0 (  99 logfoo           26 0 0 0  4   1 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 ( 1269 logfoo           26 0 0 0  4   1 0 t t 0 0 -1 f i));
     
 /* ----------------
  *	pg_time - this relation is modified by special purpose access
@@ -535,8 +535,8 @@ DATA(insert OID = 0 (  99 logfoo           26 0 0 0  4   1 0 t t 0 0 -1 f i));
  * ----------------
  */
 #define Schema_pg_time \
-{ 100l, {"timefoo"},  26l, 100l, 0l, 0l, 4, 1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }
+{ 1271l, {"timefoo"},  26l, 0l, 0l, 0l, 4, 1, 0, '\001', '\001', 0l, 0l, -1l, '\0', 'i' }
 
-DATA(insert OID = 0 (  100 timefoo         26 0 0 0  4   1 0 t t 0 0 -1 f i));
+DATA(insert OID = 0 (  1271 timefoo         26 0 0 0  4   1 0 t t 0 0 -1 f i));
     
 #endif /* PG_ATTRIBUTE_H */
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
index 8d48b9ab7df9319fa50bffa88d9f8f13790a72c6..44e1950eac21a24bc2f590e8006dbdb8b8bd7432 100644
--- a/src/include/catalog/pg_class.h
+++ b/src/include/catalog/pg_class.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_class.h,v 1.3 1996/11/01 09:30:46 scrappy Exp $
+ * $Id: pg_class.h,v 1.4 1996/11/13 20:50:56 scrappy Exp $
  *
  * NOTES
  *    ``pg_relation'' is being replaced by ``pg_class''.  currently
@@ -122,39 +122,40 @@ typedef FormData_pg_class	*Form_pg_class;
  * ----------------
  */
 
-DATA(insert OID =  71 (  pg_type 71          PGUID 0 0 0 0 0 f f r n 16 0 - - f _null_ ));
-DATA(insert OID =  75 (  pg_attribute 75      PGUID 0 0 0 0 0 f f r n 16 0 - - f _null_ ));
-DATA(insert OID =  76 (  pg_demon 76          PGUID 0 0 0 0 0 f t r n 4 0 - - f _null_ ));
-DATA(insert OID =  80 (  pg_magic 80         PGUID 0 0 0 0 0 f t r n 2 0 - - f _null_ ));
-DATA(insert OID =  81 (  pg_proc 81          PGUID 0 0 0 0 0 f f r n 16 0 - - f _null_ ));
-DATA(insert OID =  82 (  pg_server 82         PGUID 0 0 0 0 0 f t r n 3 0 - - f _null_ ));
-DATA(insert OID =  83 (  pg_class 83         PGUID 0 0 0 0 0 f f r n 18 0 - - f _null_ ));    
-DATA(insert OID =  86 (  pg_user 86          PGUID 0 0 0 0 0 f t r n 6 0 - - f _null_ ));
-DATA(insert OID =  87 (  pg_group 87          PGUID 0 0 0 0 0 f t s n 3 0 - - f _null_ ));
-DATA(insert OID =  88 (  pg_database 88      PGUID 0 0 0 0 0 f t r n 3 0 - - f _null_ ));
-DATA(insert OID =  89 (  pg_defaults 89       PGUID 0 0 0 0 0 f t r n 2 0 - - f _null_ ));
-DATA(insert OID =  90 (  pg_variable 90        PGUID 0 0 0 0 0 f t s n 2 0 - - f _null_ ));
-DATA(insert OID =  99 (  pg_log  99           PGUID 0 0 0 0 0 f t s n 1 0 - - f _null_ ));
-DATA(insert OID = 100 (  pg_time 100           PGUID 0 0 0 0 0 f t s n 1 0 - - f _null_ ));
-DATA(insert OID = 101 (  pg_hosts 101           PGUID 0 0 0 0 0 f t s n 3 0 - - f _null_ ));
+DATA(insert OID = 1247 (  pg_type 71          PGUID 0 0 0 0 0 f f r n 16 0 - - f _null_ ));
+DATA(insert OID = 1249 (  pg_attribute 75      PGUID 0 0 0 0 0 f f r n 16 0 - - f _null_ ));
+DATA(insert OID = 1251 (  pg_demon 76          PGUID 0 0 0 0 0 f t r n 4 0 - - f _null_ ));
+DATA(insert OID = 1253 (  pg_magic 80         PGUID 0 0 0 0 0 f t r n 2 0 - - f _null_ ));
+DATA(insert OID = 1255 (  pg_proc 81          PGUID 0 0 0 0 0 f f r n 16 0 - - f _null_ ));
+DATA(insert OID = 1257 (  pg_server 82         PGUID 0 0 0 0 0 f t r n 3 0 - - f _null_ ));
+DATA(insert OID = 1259 (  pg_class 83         PGUID 0 0 0 0 0 f f r n 18 0 - - f _null_ ));    
+DATA(insert OID = 1260 (  pg_user 86          PGUID 0 0 0 0 0 f t r n 6 0 - - f _null_ ));
+DATA(insert OID = 1261 (  pg_group 87          PGUID 0 0 0 0 0 f t s n 3 0 - - f _null_ ));
+DATA(insert OID = 1262 (  pg_database 88      PGUID 0 0 0 0 0 f t r n 3 0 - - f _null_ ));
+DATA(insert OID = 1263 (  pg_defaults 89       PGUID 0 0 0 0 0 f t r n 2 0 - - f _null_ ));
+DATA(insert OID = 1264 (  pg_variable 90        PGUID 0 0 0 0 0 f t s n 2 0 - - f _null_ ));
+DATA(insert OID = 1269 (  pg_log  99           PGUID 0 0 0 0 0 f t s n 1 0 - - f _null_ ));
+DATA(insert OID = 1271 (  pg_time 100           PGUID 0 0 0 0 0 f t s n 1 0 - - f _null_ ));
+DATA(insert OID = 1273 (  pg_hosts 101           PGUID 0 0 0 0 0 f t s n 3 0 - - f _null_ ));
 
-#define RelOid_pg_type		71
-#define RelOid_pg_demon       	76   
-#define RelOid_pg_attribute  	75   
-#define RelOid_pg_magic   	80      
-#define RelOid_pg_proc       	81   
-#define RelOid_pg_server     	82   
-#define RelOid_pg_class   	83   
-#define RelOid_pg_user       	86   
-#define RelOid_pg_group       	87
-#define RelOid_pg_database    	88   
-#define RelOid_pg_defaults  	89    
-#define RelOid_pg_variable   	90   
-#define RelOid_pg_log   	99       
-#define RelOid_pg_time   	100      
-#define RelOid_pg_hosts   	101      
+#define RelOid_pg_type		1247
+#define RelOid_pg_demon       	1251
+#define RelOid_pg_attribute  	1249   
+#define RelOid_pg_magic   	1253      
+#define RelOid_pg_proc       	1255
+#define RelOid_pg_server     	1257   
+#define RelOid_pg_class   	1259   
+#define RelOid_pg_user       	1260   
+#define RelOid_pg_group       	1261
+#define RelOid_pg_database    	1262   
+#define RelOid_pg_defaults  	1263    
+#define RelOid_pg_variable   	1264   
+#define RelOid_pg_log   	1269
+#define RelOid_pg_time   	1271      
+#define RelOid_pg_hosts   	1273      
     
-#define MAX_SYSTEM_RELOID       101
+#define MAX_SYSTEM_RELOID       1273    /* this does not seem to be used */
+                                        /* anywhere                      */
 
 #define       RELKIND_INDEX           'i'     /* secondary index */
 #define       RELKIND_RELATION        'r'     /* cataloged heap */
diff --git a/src/include/catalog/pg_index.h b/src/include/catalog/pg_index.h
index 1ae6c6158c572554c44d2a5685afc6cd32ecdab4..91f472422a8cf0843acf47cba9e536b19c878bcf 100644
--- a/src/include/catalog/pg_index.h
+++ b/src/include/catalog/pg_index.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_index.h,v 1.2 1996/10/31 09:47:31 scrappy Exp $
+ * $Id: pg_index.h,v 1.3 1996/11/13 20:50:57 scrappy Exp $
  *
  * NOTES
  *    the genbki.sh script reads this file and generates .bki
@@ -32,6 +32,13 @@
  *	in indrelid.
  * ----------------
  */ 
+
+/* 
+ * it seems that all variable length fields should go at the _end_,
+ * because the system cache routines only copy the fields up to the
+ * first variable length field.  so I moved indislossy, indhaskeytype,
+ * and indisunique before indpred.  --djm 8/20/96
+ */
 CATALOG(pg_index) {
     Oid 	indexrelid;
     Oid 	indrelid;
@@ -40,9 +47,10 @@ CATALOG(pg_index) {
     oid8 	indclass;
     bool 	indisclustered;
     bool 	indisarchived;
-    text	indpred;	/* query plan for partial index predicate */
     bool	indislossy; /* do we fetch false tuples (lossy compression)? */
     bool	indhaskeytype; /* does key type != attribute type? */
+    bool        indisunique; /* is this a unique index? */
+    text	indpred;	/* query plan for partial index predicate */
 } FormData_pg_index;
 
 #define INDEX_MAX_KEYS 8  /* maximum number of keys in an index definition */
@@ -58,7 +66,7 @@ typedef FormData_pg_index	*IndexTupleForm;
  *	compiler constants for pg_index
  * ----------------
  */
-#define Natts_pg_index			10
+#define Natts_pg_index			11
 #define Anum_pg_index_indexrelid	1
 #define Anum_pg_index_indrelid		2
 #define Anum_pg_index_indproc		3
@@ -66,9 +74,9 @@ typedef FormData_pg_index	*IndexTupleForm;
 #define Anum_pg_index_indclass		5
 #define Anum_pg_index_indisclustered	6
 #define Anum_pg_index_indisarchived	7
-#define Anum_pg_index_indpred		8
-#define Anum_pg_index_indislossy	9
-#define Anum_pg_index_indhaskeytype	10
-
+#define Anum_pg_index_indislossy	8
+#define Anum_pg_index_indhaskeytype	9
+#define Anum_pg_index_indisunique       10
+#define Anum_pg_index_indpred		11
 
 #endif /* PG_INDEX_H */
diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h
index 8e8ea96c8148a2b490c232fce952606f61de50f1..b2bde13362276fa70c6f5cb2e1234ce32d1193d7 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_operator.h,v 1.2 1996/10/31 09:47:49 scrappy Exp $
+ * $Id: pg_operator.h,v 1.3 1996/11/13 20:50:58 scrappy Exp $
  *
  * NOTES
  *    the genbki.sh script reads this file and generates .bki
@@ -98,7 +98,7 @@ DATA(insert OID = 95 (  "<"        PGUID 0 b t f  21  21  16 520 524 0 0 int2lt
 DATA(insert OID = 96 (  "="        PGUID 0 b t t  23  23  16  96 518 97 97 int4eq eqsel eqjoinsel ));
 DATA(insert OID = 97 (  "<"        PGUID 0 b t f  23  23  16 521 525 0 0 int4lt intltsel intltjoinsel ));
 DATA(insert OID = 98 (  "="        PGUID 0 b t t  25  25  16  98 531 664 664 texteq eqsel eqjoinsel ));
-DATA(insert OID = 99 (  "="        PGUID 0 b t t  20  20  16  99 644 645 645 char16eq eqsel eqjoinsel ));
+DATA(insert OID = 1267 (  "="        PGUID 0 b t t  20  20  16  1267 644 645 645 char16eq eqsel eqjoinsel ));
 DATA(insert OID = 329 (  "="       PGUID 0 b t t  1000  1000  16  329 0  0  0 array_eq eqsel eqjoinsel ));
 DATA(insert OID = 349 (  "="       PGUID 0 b t t  1001  1001  16  349 0  0  0 array_eq eqsel eqjoinsel ));
 DATA(insert OID = 374 (  "="       PGUID 0 b t t  1002  1002  16  374 0  0  0 array_eq eqsel eqjoinsel ));
@@ -268,9 +268,9 @@ DATA(insert OID = 596 (  "|/"      PGUID 0 l t f   0 701 701   0   0   0   0 dsq
 DATA(insert OID = 597 (  "||/"     PGUID 0 l t f   0 701 701   0   0   0   0 dcbrt - - ));
 DATA(insert OID = 598 (  "%"       PGUID 0 l t f   0 701 701   0   0   0   0 dtrunc - - ));
 DATA(insert OID = 599 (  "%"       PGUID 0 r t f 701   0 701   0   0   0   0 dround - - ));
-DATA(insert OID = 601 (  ":"       PGUID 0 l t f   0 701 701   0   0   0   0 dexp - - ));
-DATA(insert OID = 602 (  ";"       PGUID 0 l t f   0 701 701   0   0   0   0 dlog1 - - ));
-DATA(insert OID = 603 (  "|"       PGUID 0 l t f   0 704 702   0   0   0   0 intervalstart - - ));
+DATA(insert OID = 1282 (  ":"       PGUID 0 l t f   0 701 701   0   0   0   0 dexp - - ));
+DATA(insert OID = 1283 (  ";"       PGUID 0 l t f   0 701 701   0   0   0   0 dlog1 - - ));
+DATA(insert OID = 1284 (  "|"       PGUID 0 l t f   0 704 702   0   0   0   0 intervalstart - - ));
 DATA(insert OID = 606 (  "<#>"      PGUID 0 b t f 702 702 704   0   0   0   0 mktinterval - - ));
 DATA(insert OID = 607 (  "="       PGUID 0 b t t  26  26  16 607 608 97 97 oideq eqsel eqjoinsel ));
 #define	OIDEqualOperator 607	/* XXX planner/prep/semanopt.c crock */
@@ -305,7 +305,7 @@ DATA(insert OID = 640 (  "!~"      PGUID 0 b t f  19  25  16 0 639  0 0 namerege
 DATA(insert OID = 641 (  "~"       PGUID 0 b t f  25  25  16 0 642  0 0 textregexeq eqsel eqjoinsel ));
 DATA(insert OID = 642 (  "!~"      PGUID 0 b t f  25  25  16 0 641  0 0 textregexne eqsel eqjoinsel ));
 DATA(insert OID = 643 (  "<>"      PGUID 0 b t f  19  19  16 643 93 0 0 namene neqsel neqjoinsel ));
-DATA(insert OID = 644 (  "<>"      PGUID 0 b t f  20  20  16 644 99 0 0 char16ne neqsel neqjoinsel ));
+DATA(insert OID = 644 (  "<>"      PGUID 0 b t f  20  20  16 644 1267 0 0 char16ne neqsel neqjoinsel ));
 DATA(insert OID = 645 (  "<"       PGUID 0 b t f  20  20  16 647 648  0 0 char16lt intltsel intltjoinsel ));
 DATA(insert OID = 646 (  "<="       PGUID 0 b t f  20  20  16 648 647  0 0 char16le intltsel intltjoinsel ));
 DATA(insert OID = 647 (  ">"       PGUID 0 b t f  20  20  16 645 646  0 0 char16gt intltsel intltjoinsel ));
diff --git a/src/include/catalog/pg_parg.h b/src/include/catalog/pg_parg.h
index 7f1fec72f3ac7612ce7087512de48163877fff17..caecdfa37fa159d0d8f78efb94f4c93265103deb 100644
--- a/src/include/catalog/pg_parg.h
+++ b/src/include/catalog/pg_parg.h
@@ -4,10 +4,11 @@
  *    definition of the system "parg" relation (pg_parg)
  *    along with the relation's initial contents.
  *
+ * [whatever this relation was, it doesn't seem to be used anymore --djm]
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_parg.h,v 1.2 1996/10/31 09:47:51 scrappy Exp $
+ * $Id: pg_parg.h,v 1.3 1996/11/13 20:51:00 scrappy Exp $
  *
  * NOTES
  *    the genbki.sh script reads this file and generates .bki
@@ -59,11 +60,11 @@ typedef FormData_pg_parg	*Form_pg_parg;
  * ----------------
  */
 
-DATA(insert OID = 0 (  28 1 - 23 ));
-DATA(insert OID = 0 (  29 1 - 16 ));
-DATA(insert OID = 0 (  30 1 - 23 ));
+DATA(insert OID = 0 (  1242 1 - 23 ));
+DATA(insert OID = 0 (  1243 1 - 16 ));
+DATA(insert OID = 0 (  1244 1 - 23 ));
 DATA(insert OID = 0 (  31 1 - 17 ));
-DATA(insert OID = 0 (  32 1 - 23 ));
+DATA(insert OID = 0 (  1245 1 - 23 ));
 DATA(insert OID = 0 (  33 1 - 18 ));
 DATA(insert OID = 0 (  34 1 - 23 ));
 DATA(insert OID = 0 (  35 1 - 19 ));
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 612fd00884ca1b077740c4a7eaf1484f1122f43f..09d1e90fec511d1df23e660e16f3abbde4446d13 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.5 1996/11/08 01:08:37 scrappy Exp $
+ * $Id: pg_proc.h,v 1.6 1996/11/13 20:51:01 scrappy Exp $
  *
  * NOTES
  *    The script catalog/genbki.sh reads this file and generates .bki
@@ -92,11 +92,11 @@ typedef FormData_pg_proc	*Form_pg_proc;
 /* keep the following ordered by OID so that later changes can be made easier*/
 
 /* OIDS 1 - 99 */
-DATA(insert OID =  28 (  boolin            PGUID 11 f t f 1 f 16 "0" 100 0 0  100  foo bar ));
-DATA(insert OID =  29 (  boolout           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
-DATA(insert OID =  30 (  byteain           PGUID 11 f t f 1 f 17 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 1242 (  boolin            PGUID 11 f t f 1 f 16 "0" 100 0 0  100  foo bar ));
+DATA(insert OID = 1243 (  boolout           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 1244 (  byteain           PGUID 11 f t f 1 f 17 "0" 100 0 0 100  foo bar ));
 DATA(insert OID =  31 (  byteaout          PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
-DATA(insert OID =  32 (  charin            PGUID 11 f t f 1 f 18 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 1245 (  charin            PGUID 11 f t f 1 f 18 "0" 100 0 0 100  foo bar ));
 DATA(insert OID =  33 (  charout           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID =  34 (  namein          PGUID 11 f t f 1 f 19 "0" 100 0 0 100  foo bar ));
 DATA(insert OID =  35 (  nameout         PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
@@ -143,31 +143,31 @@ DATA(insert OID =  67 (  texteq            PGUID 11 f t f 2 f 16 "25 25" 100 0 0
 DATA(insert OID =  68 (  xideq             PGUID 11 f t f 2 f 16 "28 28" 100 0 0 100  foo bar ));
 DATA(insert OID =  69 (  cideq             PGUID 11 f t f 2 f 16 "29 29" 100 0 0 100  foo bar ));
 DATA(insert OID =  70 (  charne            PGUID 11 f t f 2 f 16 "18 18" 100 0 0 100  foo bar ));
-DATA(insert OID =  71 (  charlt            PGUID 11 f t f 2 f 16 "18 18" 100 0 0 100  foo bar ));
+DATA(insert OID = 1246 (  charlt            PGUID 11 f t f 2 f 16 "18 18" 100 0 0 100  foo bar ));
 DATA(insert OID =  72 (  charle            PGUID 11 f t f 2 f 16 "18 18" 100 0 0 100  foo bar ));
 DATA(insert OID =  73 (  chargt            PGUID 11 f t f 2 f 16 "18 18" 100 0 0 100  foo bar ));
 DATA(insert OID =  74 (  charge            PGUID 11 f t f 2 f 16 "18 18" 100 0 0 100  foo bar ));
-DATA(insert OID =  75 (  charpl            PGUID 11 f t f 2 f 18 "18 18" 100 0 0 100  foo bar ));
-DATA(insert OID =  76 (  charmi            PGUID 11 f t f 2 f 18 "18 18" 100 0 0 100  foo bar ));
+DATA(insert OID = 1248 (  charpl            PGUID 11 f t f 2 f 18 "18 18" 100 0 0 100  foo bar ));
+DATA(insert OID = 1250 (  charmi            PGUID 11 f t f 2 f 18 "18 18" 100 0 0 100  foo bar ));
 DATA(insert OID =  77 (  charmul           PGUID 11 f t f 2 f 18 "18 18" 100 0 0 100  foo bar ));
 DATA(insert OID =  78 (  chardiv           PGUID 11 f t f 2 f 18 "18 18" 100 0 0 100  foo bar ));
 
 DATA(insert OID =  79 (  nameregexeq     PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  80 (  nameregexne     PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  81 (  textregexeq       PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0  foo bar ));
-DATA(insert OID =  82 (  textregexne       PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0  foo bar ));
-DATA(insert OID =  83 (  textcat           PGUID 11 f t f 2 f 25 "25 25" 100 0 1 0  foo bar ));
+DATA(insert OID = 1252 (  nameregexne     PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
+DATA(insert OID = 1254 (  textregexeq       PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0  foo bar ));
+DATA(insert OID = 1256 (  textregexne       PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0  foo bar ));
+DATA(insert OID = 1258 (  textcat           PGUID 11 f t f 2 f 25 "25 25" 100 0 1 0  foo bar ));
 DATA(insert OID =  84 (  boolne            PGUID 11 f t f 2 f 16 "16 16" 100 0 0 100  foo bar ));
 
-DATA(insert OID =  97 (  rtsel             PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
-DATA(insert OID =  98 (  rtnpage           PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
-DATA(insert OID =  99 (  btreesel          PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
+DATA(insert OID = 1265 (  rtsel             PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
+DATA(insert OID = 1266 (  rtnpage           PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
+DATA(insert OID = 1268 (  btreesel          PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
 
 /* OIDS 100 - 199 */
 
-DATA(insert OID = 100 (  btreenpage        PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
-DATA(insert OID = 101 (  eqsel             PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  foo bar ));
-#define EqualSelectivityProcedure 101
+DATA(insert OID = 1270 (  btreenpage        PGUID 11 f t f 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
+DATA(insert OID = 1272 (  eqsel             PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  foo bar ));
+#define EqualSelectivityProcedure 1272
 
 DATA(insert OID = 102 (  neqsel            PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  foo bar ));
 DATA(insert OID = 103 (  intltsel          PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  foo bar ));
@@ -384,7 +384,7 @@ DATA(insert OID = 313 (  i2toi4            PGUID 11 f t f 2 f 23 "21" 100 0 0 10
 DATA(insert OID = 314 (  i4toi2            PGUID 11 f t f 2 f 21 "23" 100 0 0 100  foo bar ));
 DATA(insert OID = 315 (  keyfirsteq        PGUID 11 f t f 2 f 16 "0 21" 100 0 0 100  foo bar ));
 
-DATA(insert OID = 320 (  rtinsert          PGUID 11 f t f 4 f 23 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 320 (  rtinsert          PGUID 11 f t f 5 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 321 (  rtdelete          PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 322 (  rtgettuple        PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 323 (  rtbuild           PGUID 11 f t f 9 f 23 "0" 100 0 0 100  foo bar ));
@@ -395,7 +395,7 @@ DATA(insert OID = 327 (  rtrestrpos        PGUID 11 f t f 1 f 23 "0" 100 0 0 100
 DATA(insert OID = 328 (  rtrescan          PGUID 11 f t f 3 f 23 "0" 100 0 0 100  foo bar ));
 
 DATA(insert OID = 330 (  btgettuple        PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
-DATA(insert OID = 331 (  btinsert          PGUID 11 f t f 4 f 23 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 331 (  btinsert          PGUID 11 f t f 5 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 332 (  btdelete          PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 333 (  btbeginscan       PGUID 11 f t f 4 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 334 (  btrescan          PGUID 11 f t f 3 f 23 "0" 100 0 0 100  foo bar ));
@@ -439,7 +439,7 @@ DATA(insert OID = 370 (  path_distance     PGUID 11 f t f 2 f 701 "602 602" 100
 DATA(insert OID = 371 (  dist_ppth         PGUID 11 f t f 2 f 701 "600 602" 100 0 1 0 foo bar ));
 DATA(insert OID = 372 (  on_sb             PGUID 11 f t f 2 f 16 "601 603" 100 0 0 100  foo bar ));
 DATA(insert OID = 373 (  inter_sb          PGUID 11 f t f 2 f 16 "601 603" 100 0 0 100  foo bar ));
-DATA(insert OID = 374 (  btchar16cmp       PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100  foo bar ));
+DATA(insert OID = 1274 (  btchar16cmp       PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100  foo bar ));
 
 /* OIDS 400 - 499 */
 
@@ -447,7 +447,7 @@ DATA(insert OID =  438 (  hashsel          PGUID 11 f t t 7 f 701 "26 26 21 0 23
 DATA(insert OID =  439 (  hashnpage        PGUID 11 f t t 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
 
 DATA(insert OID = 440 (  hashgettuple     PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
-DATA(insert OID = 441 (  hashinsert       PGUID 11 f t f 4 f 23 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 441 (  hashinsert       PGUID 11 f t f 5 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 442 (  hashdelete       PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 443 (  hashbeginscan    PGUID 11 f t f 4 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 444 (  hashrescan       PGUID 11 f t f 3 f 23 "0" 100 0 0 100  foo bar ));
@@ -482,23 +482,23 @@ DATA(insert OID = 481 (  char2gt          PGUID 11 f t f 2 f 16 "409 409" 100 0
 DATA(insert OID = 482 (  char4gt          PGUID 11 f t f 2 f 16 "410 410" 100 0 0 100  foo bar ));
 DATA(insert OID = 483 (  char8gt          PGUID 11 f t f 2 f 16 "411 411" 100 0 0 100  foo bar ));
 DATA(insert OID = 484 (  char2ge          PGUID 11 f t f 2 f 16 "409 409" 100 0 0 100  foo bar ));
-DATA(insert OID =  490 (  char16eq          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
-#define Character16EqualRegProcedure	490
-DATA(insert OID = 492 (  char16lt          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
-DATA(insert OID = 493 (  char16le          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
-DATA(insert OID = 494 (  char16gt          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
-DATA(insert OID = 495 (  char16ge          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
-DATA(insert OID = 496 (  char16ne          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DATA(insert OID = 1275 (  char16eq          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+#define Character16EqualRegProcedure	1275
+DATA(insert OID = 1276 (  char16lt          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DATA(insert OID = 1277 (  char16le          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DATA(insert OID = 1278 (  char16gt          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DATA(insert OID = 1279 (  char16ge          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DATA(insert OID = 1280 (  char16ne          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
 
-DATA(insert OID = 499 (  hashchar16       PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100  foo bar ));
+DATA(insert OID = 1281 (  hashchar16       PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100  foo bar ));
 
 /* OIDS 500 - 599 */
 
 /* OIDS 600 - 699 */
 
-DATA(insert OID = 650 (  int4notin         PGUID 11 f t f 2 f 16 "21 0" 100 0 0 100  foo bar ));
-DATA(insert OID = 651 (  oidnotin          PGUID 11 f t f 2 f 16 "26 0" 100 0 0 100  foo bar ));
-DATA(insert OID = 652 (  int44in           PGUID 11 f t f 1 f 22 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 1285 (  int4notin         PGUID 11 f t f 2 f 16 "21 0" 100 0 0 100  foo bar ));
+DATA(insert OID = 1286 (  oidnotin          PGUID 11 f t f 2 f 16 "26 0" 100 0 0 100  foo bar ));
+DATA(insert OID = 1287 (  int44in           PGUID 11 f t f 1 f 22 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 653 (  int44out          PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 655 (  namelt          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
 DATA(insert OID = 656 (  namele          PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
@@ -523,8 +523,8 @@ DATA(insert OID =  696 (  char8regexne     PGUID 11 f t f 2 f 16 "411 25" 100 0
 DATA(insert OID =  699 (  char2regexeq     PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
 
 /* OIDS 700 - 799 */
-DATA(insert OID =  700 (  char16regexeq     PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  701 (  char16regexne     PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
+DATA(insert OID = 1288 (  char16regexeq     PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
+DATA(insert OID = 1289 (  char16regexne     PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
 
 DATA(insert OID = 710 (  GetPgUserName       PGUID 11 f t f 0 f 19 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 711 (  userfntest        PGUID 11 f t f 1 f 23 "23" 100 0 0 100  foo bar ));
@@ -576,7 +576,7 @@ DATA(insert OID = 771 (  int2smaller       PGUID 11 f t f 2 f 21 "21 21" 100 0 0
 DATA(insert OID =  772 (  gistsel          PGUID 11 f t t 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
 DATA(insert OID =  773 (  gistnpage        PGUID 11 f t t 7 f 701 "26 26 21 0 23 23 26" 100 0 0 100  foo bar ));
 DATA(insert OID = 774 (  gistgettuple     PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
-DATA(insert OID = 775 (  gistinsert       PGUID 11 f t f 4 f 23 "0" 100 0 0 100  foo bar ));
+DATA(insert OID = 775 (  gistinsert       PGUID 11 f t f 5 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 776 (  gistdelete       PGUID 11 f t f 2 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 777 (  gistbeginscan    PGUID 11 f t f 4 f 23 "0" 100 0 0 100  foo bar ));
 DATA(insert OID = 778 (  gistrescan       PGUID 11 f t f 3 f 23 "0" 100 0 0 100  foo bar ));
@@ -741,12 +741,12 @@ DATA(insert OID = 1106 (  time_ne          PGUID 11 f t f 2 f 16 "1083 1083" 100
 DATA(insert OID = 1107 (  time_cmp         PGUID 11 f t f 2 f 23 "1083 1083" 100 0 0 100  foo bar ));
 DATA(insert OID = 1200 (  int42reltime      PGUID 11 f t f 1 f 703 "21" 100 0 0 100  foo bar ));
 
-DATA(insert OID =  1230 (  char2icregexeq     PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  1231 (  char2icregexne     PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  1232 (  char4icregexeq     PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  1233 (  char4icregexne     PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  1234 (  char8icregexeq     PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
-DATA(insert OID =  1235 (  char8icregexne     PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DATA(insert OID =  1290 (  char2icregexeq     PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DATA(insert OID =  1291 (  char2icregexne     PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DATA(insert OID =  1292 (  char4icregexeq     PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DATA(insert OID =  1293 (  char4icregexne     PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DATA(insert OID =  1294 (  char8icregexeq     PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DATA(insert OID =  1295 (  char8icregexne     PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
 DATA(insert OID =  1236 (  char16icregexeq     PGUID 11 f t f 2 f 16 "20 25" 100 0 0 100  foo bar ));
 DATA(insert OID =  1237 (  char16icregexne     PGUID 11 f t f 2 f 16 "20 25" 100 0 0 100  foo bar ));
 DATA(insert OID =  1238 (  texticregexeq       PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0  foo bar ));
diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h
index 3ba51e6f3bf93e4081f453f1cdbfb3ef2d05f4cd..ac87e90aa3c779f02265c36b2b7fcd5d80b0169a 100644
--- a/src/include/catalog/pg_type.h
+++ b/src/include/catalog/pg_type.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.3 1996/11/04 12:12:42 scrappy Exp $
+ * $Id: pg_type.h,v 1.4 1996/11/13 20:51:06 scrappy Exp $
  *
  * NOTES
  *    the genbki.sh script reads this file and generates .bki
@@ -135,8 +135,11 @@ DATA(insert OID = 16 (  bool       PGUID  1   1 t b t \054 0   0 boolin boolout
 
 DATA(insert OID = 17 (  bytea      PGUID -1  -1 f b t \054 0  18 byteain byteaout byteain byteaout i _null_ ));
 DATA(insert OID = 18 (  char       PGUID  1   1 t b t \054 0   0 charin charout charin charout c _null_ ));
+#define CHAROID 18
+
+DATA(insert OID = 19 (  name      PGUID NAMEDATALEN NAMEDATALEN  f b t \054 0  18 namein nameout namein nameout d _null_ ));
+#define NAMEOID 19
 
-DATA(insert OID = 19 (  name      PGUID NAMEDATALEN NAMEDATALEN  f b t \054 0  18 namein nameout namein nameout i _null_ ));
 DATA(insert OID = 20 (  char16     PGUID 16  16 f b t \054 0  18 char16in char16out char16in char16out i _null_ ));
 /*DATA(insert OID = 20 (  dt         PGUID  4  10 t b t \054 0   0 dtin dtout dtin dtout i _null_ )); */
 DATA(insert OID = 21 (  int2       PGUID  2   5 t b t \054 0   0 int2in int2out int2in int2out s _null_ ));
@@ -162,6 +165,8 @@ DATA(insert OID = 23 (  int4       PGUID  4  10 t b t \054 0   0 int4in int4out
 
 DATA(insert OID = 24 (  regproc    PGUID  4  16 t b t \054 0   0 regprocin regprocout regprocin regprocout i _null_ ));
 DATA(insert OID = 25 (  text       PGUID -1  -1 f b t \054 0  18 textin textout textin textout i _null_ ));
+#define TEXTOID 25
+
 DATA(insert OID = 26 (  oid        PGUID  4  10 t b t \054 0   0 int4in int4out int4in int4out i _null_ ));
 
 #define OIDOID		26
@@ -172,24 +177,24 @@ DATA(insert OID = 29 (  cid        PGUID  2   3 t b t \054 0   0 cidin cidout ci
 DATA(insert OID = 30 (  oid8       PGUID 32  89 f b t \054 0  26 oid8in oid8out oid8in oid8out i _null_ ));
 DATA(insert OID = 32 (  SET        PGUID -1  -1 f r t \054 0  -1 textin textout textin textout i _null_ ));
 
-DATA(insert OID = 71 ( pg_type PGUID 1 1 t b t \054 71 0 foo bar foo bar c _null_));
-DATA(insert OID = 75 ( pg_attribute PGUID 1 1 t b t \054 75 0 foo bar foo bar c _null_));
-DATA(insert OID = 76 ( pg_demon PGUID 1 1 t b t \054 76 0 foo bar foo bar c _null_));
-DATA(insert OID = 80 ( pg_magic PGUID 1 1 t b t \054 80 0 foo bar foo bar c _null_));
-DATA(insert OID = 81 ( pg_proc PGUID 1 1 t b t \054 81 0 foo bar foo bar c _null_));
-DATA(insert OID = 82 ( pg_server PGUID 1 1 t b t \054 82 0 foo bar foo bar c _null_));
-DATA(insert OID = 83 ( pg_class PGUID 1 1 t b t \054 83 0 foo bar foo bar c _null_));
-DATA(insert OID = 86 ( pg_user PGUID 1 1 t b t \054 86 0 foo bar foo bar c _null_));
-DATA(insert OID = 87 ( pg_group PGUID 1 1 t b t \054 87 0 foo bar foo bar c _null_));
-DATA(insert OID = 88 ( pg_database PGUID 1 1 t b t \054 88 0 foo bar foo bar c _null_));
-DATA(insert OID = 89 ( pg_defaults PGUID 1 1 t b t \054 89 0 foo bar foo bar c _null_));
-DATA(insert OID = 90 ( pg_variable PGUID 1 1 t b t \054 90 0 foo bar foo bar c _null_));
-DATA(insert OID = 99 ( pg_log PGUID 1 1 t b t \054 99 0 foo bar foo bar c _null_));
+DATA(insert OID = 71 ( pg_type PGUID 1 1 t b t \054 1247 0 foo bar foo bar c _null_));
+DATA(insert OID = 75 ( pg_attribute PGUID 1 1 t b t \054 1249 0 foo bar foo bar c _null_));
+DATA(insert OID = 76 ( pg_demon PGUID 1 1 t b t \054 1251 0 foo bar foo bar c _null_));
+DATA(insert OID = 80 ( pg_magic PGUID 1 1 t b t \054 1253 0 foo bar foo bar c _null_));
+DATA(insert OID = 81 ( pg_proc PGUID 1 1 t b t \054 1255 0 foo bar foo bar c _null_));
+DATA(insert OID = 82 ( pg_server PGUID 1 1 t b t \054 1257 0 foo bar foo bar c _null_));
+DATA(insert OID = 83 ( pg_class PGUID 1 1 t b t \054 1259 0 foo bar foo bar c _null_));
+DATA(insert OID = 86 ( pg_user PGUID 1 1 t b t \054 1260 0 foo bar foo bar c _null_));
+DATA(insert OID = 87 ( pg_group PGUID 1 1 t b t \054 1261 0 foo bar foo bar c _null_));
+DATA(insert OID = 88 ( pg_database PGUID 1 1 t b t \054 1262 0 foo bar foo bar c _null_));
+DATA(insert OID = 89 ( pg_defaults PGUID 1 1 t b t \054 1263 0 foo bar foo bar c _null_));
+DATA(insert OID = 90 ( pg_variable PGUID 1 1 t b t \054 1264 0 foo bar foo bar c _null_));
+DATA(insert OID = 99 ( pg_log PGUID 1 1 t b t \054 1269 0 foo bar foo bar c _null_));
 
 /* OIDS 100 - 199 */
 
-DATA(insert OID = 100 ( pg_time PGUID 1 1 t b t \054 100 0 foo bar foo bar c _null_));
-DATA(insert OID = 101 ( pg_time PGUID 1 1 t b t \054 101 0 foo bar foo bar c _null_));
+DATA(insert OID = 100 ( pg_time PGUID 1 1 t b t \054 1271 0 foo bar foo bar c _null_));
+DATA(insert OID = 101 ( pg_hosts PGUID 1 1 t b t \054 1273 0 foo bar foo bar c _null_));
 
 /* OIDS 200 - 299 */
 
diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h
index 7221da3344c5d0bca4de6b00d6991a895f3bca26..4d582910015500552d0fcbe6cfefd1701a86e9aa 100644
--- a/src/include/commands/defrem.h
+++ b/src/include/commands/defrem.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: defrem.h,v 1.5 1996/11/10 03:04:49 momjian Exp $
+ * $Id: defrem.h,v 1.6 1996/11/13 20:51:18 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,7 +23,9 @@ extern void DefineIndex(char *heapRelationName,
 			char *indexRelationName,
 			char *accessMethodName,
 			List *attributeList,
-			List *parameterList, Expr *predicate,
+			List *parameterList, 
+			bool unique,
+			Expr *predicate,
 			List *rangetable);
 extern void ExtendIndex(char *indexRelationName,
 			Expr *predicate,
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index 8ec81547f7f4d13c4bed43e7860d3a2559fa64c8..0fc4a0834aa5e522abb7f124f5e335346063183d 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: executor.h,v 1.5 1996/11/10 03:04:59 momjian Exp $
+ * $Id: executor.h,v 1.6 1996/11/13 20:51:31 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -172,7 +172,7 @@ extern void ExecCloseIndices(RelationInfo *resultRelationInfo);
 extern IndexTuple ExecFormIndexTuple(HeapTuple heapTuple,
 	Relation heapRelation, Relation indexRelation, IndexInfo *indexInfo);
 extern void ExecInsertIndexTuples(TupleTableSlot *slot, ItemPointer tupleid,
-				      EState *estate);
+				      EState *estate, bool is_update);
 
 
 /* ----------------------------------------------------------------
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 9e61aeffbc8ad997f05325445b35efbe0511027c..01c037b54fead5287150bb756d32e83027365eab 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parsenodes.h,v 1.6 1996/11/04 07:18:17 scrappy Exp $
+ * $Id: parsenodes.h,v 1.7 1996/11/13 20:56:15 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -217,6 +217,7 @@ typedef struct IndexStmt {
     List		*rangetable;	/* range table, filled in
 					   by transformStmt() */
     bool                *lossy;         /* is index lossy? */
+    bool                unique;         /* is index unique? */
 } IndexStmt;
 
 /* ----------------------
@@ -594,7 +595,7 @@ typedef struct ResTarget {
     char		*name;		/* name of the result column */
     List		*indirection;	/* array references */
     Node		*val;		/* the value of the result
-					   (A_Expr or Attr) */
+					   (A_Expr or Attr) (or A_Const) */
 } ResTarget;
 
 /*