]> granicus.if.org Git - postgresql/commitdiff
Enable ALTER TABLE ADD PRIMARY KEY for pg_dump, for performance reasons
authorBruce Momjian <bruce@momjian.us>
Wed, 6 Mar 2002 20:48:42 +0000 (20:48 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 6 Mar 2002 20:48:42 +0000 (20:48 +0000)
so index is not on table during COPY.

> > AFAICT, the patch I posted to -patches a little while to enable the
> > usage of ALTER TABLE ADD PRIMARY KEY by pg_dump hasn't been applied, nor
> > is it in the unapplied patches list. I was under the impression that
> > this was in the queue for application -- did it just get lost?

Neil Conway <neilconway@rogers.com>

src/bin/pg_dump/pg_dump.c

index ceea1e26fe71539fd8c2408eeb60f01e6b52de9f..c13557485f4a85372c29d201606fdcf82bccea64 100644 (file)
@@ -22,7 +22,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.242 2002/02/27 20:59:05 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.243 2002/03/06 20:48:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -4259,7 +4259,7 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
 
 
 
-                               /* put the CONSTRAINTS inside the table def */
+                               /* Put the CONSTRAINTS inside the table def */
                                for (k = 0; k < tblinfo[i].ncheck; k++)
                                {
                                        if (actual_atts + k > 0)
@@ -4269,36 +4269,15 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
                                                                          tblinfo[i].check_expr[k]);
                                }
 
-                               /* Primary Key */
-                               if (tblinfo[i].pkIndexOid != NULL)
-                               {
-                                       PQExpBuffer consDef;
-
-                                       /* Find the corresponding index */
-                                       for (k = 0; k < numIndexes; k++)
-                                       {
-                                               if (strcmp(indinfo[k].indexreloid,
-                                                                  tblinfo[i].pkIndexOid) == 0)
-                                                       break;
-                                       }
-
-                                       if (k >= numIndexes)
-                                       {
-                                               write_msg(NULL, "dumpTables(): failed sanity check, could not find index (%s) for primary key constraint\n",
-                                                                 tblinfo[i].pkIndexOid);
-                                               exit_nicely();
-                                       }
-
-                                       consDef = getPKconstraint(&tblinfo[i], &indinfo[k]);
-
-                                       if ((actual_atts + tblinfo[i].ncheck) > 0)
-                                               appendPQExpBuffer(q, ",\n\t");
-
-                                       appendPQExpBuffer(q, "%s", consDef->data);
-
-                                       destroyPQExpBuffer(consDef);
-                               }
-
+                               /*
+                                * Primary Key: In versions of PostgreSQL prior to 7.2, we
+                                * needed to include the primary key in the table definition.
+                                * However, this is not ideal because it creates an index
+                                * on the table, which makes COPY slower. As of release 7.2,
+                                * we can add primary keys to a table after is has been created,
+                                * using ALTER TABLE ; see dumpIndexes() for more information.
+                                * Therefore, we ignore primary keys in this function.
+                                */
 
                                appendPQExpBuffer(q, "\n)");
 
@@ -4454,27 +4433,19 @@ dumpIndexes(Archive *fout, IndInfo *indinfo, int numIndexes,
                /* Handle PK indexes */
                if (strcmp(indinfo[i].indisprimary, "t") == 0)
                {
-#if 0
-
-                       /*
-                        * PK: Enable this code when ALTER TABLE supports PK
-                        * constraints.
-                        */
-
                        PQExpBuffer consDef = getPKconstraint(&tblinfo[tableInd], &indinfo[i]);
 
                        resetPQExpBuffer(q);
 
                        appendPQExpBuffer(q, "Alter Table %s Add %s;",
-                                                 fmtId(tblinfo[tableInd].relname, force_quotes),
+                                                         fmtId(tblinfo[tableInd].relname, force_quotes),
                                                          consDef->data);
 
-                       ArchiveEntry(fout, indinfo[i].oid, tblinfo[tableInd].primary_key_name,
+                       ArchiveEntry(fout, indinfo[i].indexreloid, tblinfo[tableInd].primary_key_name,
                                                 "CONSTRAINT", NULL, q->data, "",
                                                 "", tblinfo[tableInd].usename, NULL, NULL);
 
                        destroyPQExpBuffer(consDef);
-#endif
 
                        /*
                         * Don't need to do anything else for this system-generated