diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index fbf9f3017246d58388e27572b357bb279cc2d062..ce48422687b09f995fd2930c690d8da6a18e80bf 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.62 1998/09/09 03:42:52 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.63 1998/09/10 15:32:16 vadim Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -762,6 +762,7 @@ UpdateIndexRelation(Oid indexoid,
 	predLen = VARSIZE(predText);
 	itupLen = predLen + sizeof(FormData_pg_index);
 	indexForm = (Form_pg_index) palloc(itupLen);
+	memset (indexForm, 0, sizeof(FormData_pg_index));
 
 	memmove((char *) &indexForm->indpred, (char *) predText, predLen);
 
diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h
index 4a3bbd6ce55a3833a870ed3976768c02b1033e0c..3eb25fa43711a587f65f2980f0ae13f46ee24932 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.43 1998/09/01 04:34:51 momjian Exp $
+ * $Id: pg_attribute.h,v 1.44 1998/09/10 15:32:30 vadim Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -361,16 +361,20 @@ DATA(insert OID = 0 ( 1249 cmax				29 0  4  -6 0 -1 -1 t f i f f));
 { 1259, {"reltype"},	   26, 0,	4,	2, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
 { 1259, {"relowner"},	   23, 0,	4,	3, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
 { 1259, {"relam"},		   26, 0,	4,	4, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259, {"relpages"},	   23,	0,	4,	5, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259, {"reltuples"},	   23,	0,	4,	6, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259, {"relhasindex"},   16,	0,	1,	7, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259, {"relisshared"},   16,	0,	1,	8, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259, {"relkind"},	   18,	0,	1,	9, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259, {"relnatts"},	   21,	0,	2, 10, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \
+{ 1259, {"relpages"},	   23, 0,	4,	5, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1259, {"reltuples"},	   23, 0,	4,	6, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1259, {"relhasindex"},   16, 0,	1,	7, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259, {"relisshared"},   16, 0,	1,	8, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259, {"relkind"},	   18, 0,	1,	9, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259, {"relnatts"},	   21, 0,	2, 10, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \
 { 1259, {"relchecks"},	   21, 0,	2, 11, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \
 { 1259, {"reltriggers"},   21, 0,	2, 12, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \
-{ 1259, {"relhasrules"},   16,	0,	1, 13, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259, {"relacl"},		 1034, 0, -1, 14, 0, -1, -1,	'\0', '\0', 'i', '\0', '\0' }
+{ 1259, {"relukeys"},      21, 0,	2, 13, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \
+{ 1259, {"relfkeys"},      21, 0,	2, 14, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \
+{ 1259, {"relrefs"},       21, 0,	2, 15, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \
+{ 1259, {"relhaspkey"},    16, 0,	1, 16, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259, {"relhasrules"},   16, 0,	1, 17, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259, {"relacl"},		 1034, 0,  -1, 18, 0, -1, -1,	'\0', '\0', 'i', '\0', '\0' }
 
 DATA(insert OID = 0 ( 1259 relname			19 0 NAMEDATALEN   1 0 -1 -1 f f i f f));
 DATA(insert OID = 0 ( 1259 reltype			26 0  4   2 0 -1 -1 t f i f f));
@@ -384,8 +388,12 @@ DATA(insert OID = 0 ( 1259 relkind			18 0  1   9 0 -1 -1 t f c f f));
 DATA(insert OID = 0 ( 1259 relnatts			21 0  2  10 0 -1 -1 t f s f f));
 DATA(insert OID = 0 ( 1259 relchecks		21 0  2  11 0 -1 -1 t f s f f));
 DATA(insert OID = 0 ( 1259 reltriggers		21 0  2  12 0 -1 -1 t f s f f));
-DATA(insert OID = 0 ( 1259 relhasrules		16 0  1  13 0 -1 -1 t f c f f));
-DATA(insert OID = 0 ( 1259 relacl		  1034 0 -1  14 0 -1 -1 f f i f f));
+DATA(insert OID = 0 ( 1259 relukeys			21 0  2  13 0 -1 -1 t f s f f));
+DATA(insert OID = 0 ( 1259 relfkeys			21 0  2  14 0 -1 -1 t f s f f));
+DATA(insert OID = 0 ( 1259 relrefs			21 0  2  15 0 -1 -1 t f s f f));
+DATA(insert OID = 0 ( 1259 relhaspkey		16 0  1  16 0 -1 -1 t f c f f));
+DATA(insert OID = 0 ( 1259 relhasrules		16 0  1  17 0 -1 -1 t f c f f));
+DATA(insert OID = 0 ( 1259 relacl		  1034 0 -1  18 0 -1 -1 f f i f f));
 DATA(insert OID = 0 ( 1259 ctid				27 0  6  -1 0 -1 -1 f f i f f));
 DATA(insert OID = 0 ( 1259 oid				26 0  4  -2 0 -1 -1 t f i f f));
 DATA(insert OID = 0 ( 1259 xmin				28 0  4  -3 0 -1 -1 t f i f f));
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
index e9f860fb446c63c21bfdadceeb6bf6d66cf74af1..c96e05e393987a2d0675f0f7823433b39fda185b 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.24 1998/09/01 04:34:53 momjian Exp $
+ * $Id: pg_class.h,v 1.25 1998/09/10 15:32:31 vadim Exp $
  *
  * NOTES
  *	  ``pg_relation'' is being replaced by ``pg_class''.  currently
@@ -71,6 +71,10 @@ CATALOG(pg_class) BOOTSTRAP
 	int2		relchecks;		/* # of CHECK constraints, not stored in
 								 * db? */
 	int2		reltriggers;	/* # of TRIGGERs */
+	int2		relukeys;		/* # of Unique keys */
+	int2		relfkeys;		/* # of FOREIGN KEYs */
+	int2		relrefs;		/* # of references to this relation */
+	bool		relhaspkey;		/* has PRIMARY KEY */
 	bool		relhasrules;
 	aclitem		relacl[1];		/* this is here for the catalog */
 } FormData_pg_class;
@@ -96,8 +100,8 @@ typedef FormData_pg_class *Form_pg_class;
  *		relacl field.
  * ----------------
  */
-#define Natts_pg_class_fixed			13
-#define Natts_pg_class					14
+#define Natts_pg_class_fixed			17
+#define Natts_pg_class					18
 #define Anum_pg_class_relname			1
 #define Anum_pg_class_reltype			2
 #define Anum_pg_class_relowner			3
@@ -110,37 +114,41 @@ typedef FormData_pg_class *Form_pg_class;
 #define Anum_pg_class_relnatts			10
 #define Anum_pg_class_relchecks			11
 #define Anum_pg_class_reltriggers		12
-#define Anum_pg_class_relhasrules		13
-#define Anum_pg_class_relacl			14
+#define Anum_pg_class_relukeys			13
+#define Anum_pg_class_relfkeys			14
+#define Anum_pg_class_relrefs			15
+#define Anum_pg_class_relhaspkey		16
+#define Anum_pg_class_relhasrules		17
+#define Anum_pg_class_relacl			18
 
 /* ----------------
  *		initial contents of pg_class
  * ----------------
  */
 
-DATA(insert OID = 1247 (  pg_type 71		  PGUID 0 0 0 f f r 16 0 0 f _null_ ));
+DATA(insert OID = 1247 (  pg_type 71		  PGUID 0 0 0 f f r 16 0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1249 (  pg_attribute 75	  PGUID 0 0 0 f f r 14 0 0 f _null_ ));
+DATA(insert OID = 1249 (  pg_attribute 75	  PGUID 0 0 0 f f r 14 0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1255 (  pg_proc 81		  PGUID 0 0 0 f f r 16 0 0 f _null_ ));
+DATA(insert OID = 1255 (  pg_proc 81		  PGUID 0 0 0 f f r 16 0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1259 (  pg_class 83		  PGUID 0 0 0 f f r 14 0 0 f _null_ ));
+DATA(insert OID = 1259 (  pg_class 83		  PGUID 0 0 0 f f r 18 0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1260 (  pg_shadow 86		  PGUID 0 0 0 f t r 8  0 0 f _null_ ));
+DATA(insert OID = 1260 (  pg_shadow 86		  PGUID 0 0 0 f t r 8  0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1261 (  pg_group 87		  PGUID 0 0 0 f t s 3  0 0 f _null_ ));
+DATA(insert OID = 1261 (  pg_group 87		  PGUID 0 0 0 f t s 3  0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1262 (  pg_database 88	  PGUID 0 0 0 f t r 4  0 0 f _null_ ));
+DATA(insert OID = 1262 (  pg_database 88	  PGUID 0 0 0 f t r 4  0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1264 (  pg_variable 90	  PGUID 0 0 0 f t s 2  0 0 f _null_ ));
+DATA(insert OID = 1264 (  pg_variable 90	  PGUID 0 0 0 f t s 2  0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1269 (  pg_log  99		  PGUID 0 0 0 f t s 1  0 0 f _null_ ));
+DATA(insert OID = 1269 (  pg_log  99		  PGUID 0 0 0 f t s 1  0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1215 (  pg_attrdef 109	  PGUID 0 0 0 t t r 4  0 0 f _null_ ));
+DATA(insert OID = 1215 (  pg_attrdef 109	  PGUID 0 0 0 t t r 4  0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1216 (  pg_relcheck 110	  PGUID 0 0 0 t t r 4  0 0 f _null_ ));
+DATA(insert OID = 1216 (  pg_relcheck 110	  PGUID 0 0 0 t t r 4  0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1219 (  pg_trigger 111	  PGUID 0 0 0 t t r 7  0 0 f _null_ ));
+DATA(insert OID = 1219 (  pg_trigger 111	  PGUID 0 0 0 t t r 7  0 0 0 0 0 f f _null_ ));
 DESCR("");
 
 #define RelOid_pg_type			1247
diff --git a/src/include/catalog/pg_index.h b/src/include/catalog/pg_index.h
index aba984717439c45992da3ccd031e15e867513f37..23ed317baa0193fa1c204429247b9bf142fb5052 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.9 1998/09/06 04:49:51 momjian Exp $
+ * $Id: pg_index.h,v 1.10 1998/09/10 15:32:32 vadim Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -52,6 +52,9 @@ CATALOG(pg_index)
 								 * compression)? */
 	bool		indhaskeytype;	/* does key type != attribute type? */
 	bool		indisunique;	/* is this a unique index? */
+	bool		indisprimary;	/* is this index for primary key */
+	Oid			indreference;	/* oid of index of referenced relation 
+								 * (ie - this index for foreign key */
 	text		indpred;		/* query plan for partial index predicate */
 } FormData_pg_index;
 
@@ -69,7 +72,7 @@ typedef FormData_pg_index *Form_pg_index;
  *		compiler constants for pg_index
  * ----------------
  */
-#define Natts_pg_index					10
+#define Natts_pg_index					12
 #define Anum_pg_index_indexrelid		1
 #define Anum_pg_index_indrelid			2
 #define Anum_pg_index_indproc			3
@@ -79,6 +82,8 @@ typedef FormData_pg_index *Form_pg_index;
 #define Anum_pg_index_indislossy		7
 #define Anum_pg_index_indhaskeytype		8
 #define Anum_pg_index_indisunique		9
-#define Anum_pg_index_indpred			10
+#define Anum_pg_index_indisprimary		10
+#define Anum_pg_index_indreference		11
+#define Anum_pg_index_indpred			12
 
 #endif	 /* PG_INDEX_H */