|
22 | 22 | *
|
23 | 23 | *
|
24 | 24 | * IDENTIFICATION
|
25 |
| - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.181 2000/11/24 22:32:26 petere Exp $ |
| 25 | + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.182 2000/11/27 20:51:40 momjian Exp $ |
26 | 26 | *
|
27 | 27 | * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
|
28 | 28 | *
|
@@ -1544,6 +1544,8 @@ clearTableInfo(TableInfo *tblinfo, int numTables)
|
1544 | 1544 | free(tblinfo[i].notnull);
|
1545 | 1545 | if (tblinfo[i].primary_key)
|
1546 | 1546 | free(tblinfo[i].primary_key);
|
| 1547 | +if (tblinfo[i].primary_key_name) |
| 1548 | +free(tblinfo[i].primary_key_name); |
1547 | 1549 | }
|
1548 | 1550 | free(tblinfo);
|
1549 | 1551 | }
|
@@ -2144,6 +2146,49 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
|
2144 | 2146 | else
|
2145 | 2147 | tblinfo[i].primary_key=NULL;
|
2146 | 2148 |
|
| 2149 | +/* Get primary key name (if primary key exist) */ |
| 2150 | +if (tblinfo[i].primary_key) |
| 2151 | +{ |
| 2152 | +PGresult*res2; |
| 2153 | +intn; |
| 2154 | + |
| 2155 | +resetPQExpBuffer(query); |
| 2156 | +appendPQExpBuffer(query, |
| 2157 | +"SELECT c.relname " |
| 2158 | +"FROM pg_index i, pg_class c " |
| 2159 | +"WHERE i.indrelid = %s" |
| 2160 | +"AND i.indisprimary " |
| 2161 | +"AND c.oid = i.indexrelid ", |
| 2162 | +tblinfo[i].oid); |
| 2163 | +res2=PQexec(g_conn,query->data); |
| 2164 | +if (!res2||PQresultStatus(res2)!=PGRES_TUPLES_OK) |
| 2165 | +{ |
| 2166 | +fprintf(stderr,"getTables(): SELECT (for PRIMARY KEY NAME) failed. Explanation from backend: %s", |
| 2167 | +PQerrorMessage(g_conn)); |
| 2168 | +exit_nicely(g_conn); |
| 2169 | +} |
| 2170 | + |
| 2171 | +n=PQntuples(res2); |
| 2172 | +if (n!=1) |
| 2173 | +{ |
| 2174 | +fprintf(stderr, |
| 2175 | +"getTables(): SELECT (for PRIMARY KEY NAME) failed. This is impossible but object with OID == %s have %d primary keys.\n", |
| 2176 | +tblinfo[i].oid, |
| 2177 | +n); |
| 2178 | +exit_nicely(g_conn); |
| 2179 | +} |
| 2180 | + |
| 2181 | +tblinfo[i].primary_key_name= |
| 2182 | +strdup(fmtId(PQgetvalue(res2,0,0),force_quotes)); |
| 2183 | +if (tblinfo[i].primary_key_name==NULL) |
| 2184 | +{ |
| 2185 | +perror("strdup"); |
| 2186 | +exit(1); |
| 2187 | +} |
| 2188 | +} |
| 2189 | +else |
| 2190 | +tblinfo[i].primary_key_name=NULL; |
| 2191 | + |
2147 | 2192 | /* Get Triggers */
|
2148 | 2193 | if (tblinfo[i].ntrig>0)
|
2149 | 2194 | {
|
@@ -3558,7 +3603,10 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
|
3558 | 3603 | {
|
3559 | 3604 | if (actual_atts+tblinfo[i].ncheck>0)
|
3560 | 3605 | appendPQExpBuffer(q,",\n\t");
|
3561 |
| -appendPQExpBuffer(q,"PRIMARY KEY (%s)",tblinfo[i].primary_key); |
| 3606 | +appendPQExpBuffer(q, |
| 3607 | +"CONSTRAINT %s PRIMARY KEY (%s)", |
| 3608 | +tblinfo[i].primary_key_name, |
| 3609 | +tblinfo[i].primary_key); |
3562 | 3610 | }
|
3563 | 3611 |
|
3564 | 3612 | appendPQExpBuffer(q,"\n)");
|
|