]> granicus.if.org Git - postgresql/commitdiff
I've hacked up pg_dump so that it generates CONSTRAINT and CHECK
authorBruce Momjian <bruce@momjian.us>
Tue, 16 Jun 1998 06:52:15 +0000 (06:52 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 16 Jun 1998 06:52:15 +0000 (06:52 +0000)
syntax that can be read back in with psql.  I did this by adding
a
 "-c" switch that controls moving the CONTSTRAINT statements inside
the CREATE TABLE statements and adding () around the CHECK arguments.
Here's diffs against the 6.3.2 version of pg_dump.c.

ccb

src/bin/pg_dump/pg_dump.c

index b57c8bf85b1eb7bb5a3ab9cfdc648fb4895e2ccc..613b2a5b88a7962906723b959e8b22dd9440d9b3 100644 (file)
@@ -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)