aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-03-06 20:48:42 +0000
committerBruce Momjian <bruce@momjian.us>2002-03-06 20:48:42 +0000
commit5b5cef9abd92e6e17f78cbf2838ac898f3427255 (patch)
tree2414a5a681e73fa96d9880dc4aca4f3fd44517a7
parent62e6eb9bf710c66c0f353febe8eda9bdb2e1c8f6 (diff)
downloadpostgresql-5b5cef9abd92e6e17f78cbf2838ac898f3427255.tar.gz
postgresql-5b5cef9abd92e6e17f78cbf2838ac898f3427255.zip
Enable ALTER TABLE ADD PRIMARY KEY for pg_dump, for performance reasons
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>
-rw-r--r--src/bin/pg_dump/pg_dump.c55
1 files changed, 13 insertions, 42 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index ceea1e26fe7..c13557485f4 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -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