diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index b57c8bf85b1eb7bb5a3ab9cfdc648fb4895e2ccc..613b2a5b88a7962906723b959e8b22dd9440d9b3 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -21,7 +21,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.72 1998/06/15 19:30:01 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.73 1998/06/16 06:52:15 momjian Exp $
  *
  * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
  *
@@ -110,6 +110,7 @@ int			dumpData;			/* dump data using proper insert strings */
 int			attrNames;			/* put attr names into insert strings */
 int			schemaOnly;
 int			dataOnly;
+int                     compatConstraint;
 
 char		g_opaque_type[10];	/* name for the opaque type */
 
@@ -125,6 +126,8 @@ usage(const char *progname)
 			"usage:  %s [options] dbname\n", progname);
 	fprintf(stderr,
 			"\t -a          \t\t dump out only the data, no schema\n");
+	fprintf(stderr,
+		        "\t -c          \t\t generate pgsql-compatible CONSTRAINT syntax\n");
 	fprintf(stderr,
 			"\t -d          \t\t dump data as proper insert strings\n");
 	fprintf(stderr,
@@ -550,17 +553,21 @@ main(int argc, char **argv)
 	g_comment_end[0] = '\0';
 	strcpy(g_opaque_type, "opaque");
 
-	dataOnly = schemaOnly = dumpData = attrNames = 0;
+	compatConstraint = dataOnly = schemaOnly = dumpData = attrNames = 0;
 
 	progname = *argv;
 
-	while ((c = getopt(argc, argv, "adDf:h:op:st:vzu")) != EOF)
+	while ((c = getopt(argc, argv, "acdDf:h:op:st:vzu")) != EOF)
 	{
 		switch (c)
 		{
 			case 'a':			/* Dump data only */
 				dataOnly = 1;
 				break;
+		        case 'c':                       /* generate constraint syntax that
+							    can be read back into postgreSQL */
+			        compatConstraint = 1;
+				break;
 			case 'd':			/* dump data as proper insert strings */
 				dumpData = 1;
 				break;
@@ -1491,7 +1498,12 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 				query[0] = 0;
 				if (name[0] != '$')
 					sprintf(query, "CONSTRAINT %s ", name);
-				sprintf(query, "%sCHECK %s", query, expr);
+				if( compatConstraint ) {
+				  sprintf(query, "%sCHECK (%s)", query, expr);
+				}
+				else {
+				  sprintf(query, "%sCHECK %s", query, expr);
+				}
 				tblinfo[i].check_expr[i2] = strdup(query);
 			}
 			PQclear(res2);
@@ -2509,6 +2521,17 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
 				}
 			}
 
+			if( compatConstraint ) {
+				/* put the CONSTRAINTS inside the table def */
+				for (k = 0; k < tblinfo[i].ncheck; k++)
+				{
+					sprintf(q, "%s%s %s",
+						q,
+						(actual_atts + k > 0) ? ", " : "",
+						tblinfo[i].check_expr[k]);
+				}
+			}
+
 			strcat(q, ")");
 
 			if (numParents > 0)
@@ -2524,8 +2547,9 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
 				strcat(q, ")");
 			}
 
-			if (tblinfo[i].ncheck > 0)
+			if( !compatConstraint )
 			{
+				/* put the CONSTRAINT defs outside the table def */
 				for (k = 0; k < tblinfo[i].ncheck; k++)
 				{
 					sprintf(q, "%s%s %s",
@@ -2534,6 +2558,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
 							tblinfo[i].check_expr[k]);
 				}
 			}
+
 			strcat(q, ";\n");
 			fputs(q, fout);
 			if (acls)