Index: src/bin/pg_dump//common.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_dump/common.c,v retrieving revision 1.70 diff -c -r1.70 common.c *** src/bin/pg_dump//common.c 2002/09/04 20:31:34 1.70 --- src/bin/pg_dump//common.c 2002/09/28 17:43:47 *************** *** 284,299 **** if (numParents == 0) continue; /* nothing to see here, move along */ ! /* * For each attr, check the parent info: if no parent has an attr * with the same name, then it's not inherited. If there *is* an * attr with the same name, then only dump it if: * ! * - it is NOT NULL and zero parents are NOT NULL OR - it has a ! * default value AND the default value does not match all parent ! * default values, or no parents specify a default. * * See discussion on -hackers around 2-Apr-2001. */ for (j = 0; j < tblinfo[i].numatts; j++) { --- 284,301 ---- if (numParents == 0) continue; /* nothing to see here, move along */ ! /*---------------------------------------------------------------- * For each attr, check the parent info: if no parent has an attr * with the same name, then it's not inherited. If there *is* an * attr with the same name, then only dump it if: * ! * - it is NOT NULL and zero parents are NOT NULL ! * OR ! * - it has a default value AND the default value does not match ! * all parent default values, or no parents specify a default. * * See discussion on -hackers around 2-Apr-2001. + *---------------------------------------------------------------- */ for (j = 0; j < tblinfo[i].numatts; j++) { *************** *** 358,363 **** --- 360,371 ---- { tblinfo[i].inhAttrs[j] = false; tblinfo[i].inhNotNull[j] = false; + } + + /* Clear it if attr has local definition */ + if (g_fout->remoteVersion >= 70300 && tblinfo[i].attislocal[j]) + { + tblinfo[i].inhAttrs[j] = false; } } } Index: src/bin/pg_dump//pg_dump.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_dump/pg_dump.c,v retrieving revision 1.301 diff -c -r1.301 pg_dump.c *** src/bin/pg_dump//pg_dump.c 2002/09/24 23:14:25 1.301 --- src/bin/pg_dump//pg_dump.c 2002/09/28 17:44:03 *************** *** 2356,2361 **** --- 2356,2362 ---- int i_attnotnull; int i_atthasdef; int i_attisdropped; + int i_attislocal; PGresult *res; int ntups; bool hasdefaults; *************** *** 2397,2403 **** if (g_fout->remoteVersion >= 70300) { appendPQExpBuffer(q, "SELECT attnum, attname, atttypmod, attstattarget, " ! "attnotnull, atthasdef, attisdropped, " "pg_catalog.format_type(atttypid,atttypmod) as atttypname " "from pg_catalog.pg_attribute a " "where attrelid = '%s'::pg_catalog.oid " --- 2398,2404 ---- if (g_fout->remoteVersion >= 70300) { appendPQExpBuffer(q, "SELECT attnum, attname, atttypmod, attstattarget, " ! "attnotnull, atthasdef, attisdropped, attislocal, " "pg_catalog.format_type(atttypid,atttypmod) as atttypname " "from pg_catalog.pg_attribute a " "where attrelid = '%s'::pg_catalog.oid " *************** *** 2413,2419 **** * been explicitly set or was just a default. */ appendPQExpBuffer(q, "SELECT attnum, attname, atttypmod, -1 as attstattarget, " ! "attnotnull, atthasdef, false as attisdropped, " "format_type(atttypid,atttypmod) as atttypname " "from pg_attribute a " "where attrelid = '%s'::oid " --- 2414,2420 ---- * been explicitly set or was just a default. */ appendPQExpBuffer(q, "SELECT attnum, attname, atttypmod, -1 as attstattarget, " ! "attnotnull, atthasdef, false as attisdropped, null as attislocal, " "format_type(atttypid,atttypmod) as atttypname " "from pg_attribute a " "where attrelid = '%s'::oid " *************** *** 2425,2431 **** { /* format_type not available before 7.1 */ appendPQExpBuffer(q, "SELECT attnum, attname, atttypmod, -1 as attstattarget, " ! "attnotnull, atthasdef, false as attisdropped, " "(select typname from pg_type where oid = atttypid) as atttypname " "from pg_attribute a " "where attrelid = '%s'::oid " --- 2426,2432 ---- { /* format_type not available before 7.1 */ appendPQExpBuffer(q, "SELECT attnum, attname, atttypmod, -1 as attstattarget, " ! "attnotnull, atthasdef, false as attisdropped, null as attislocal, " "(select typname from pg_type where oid = atttypid) as atttypname " "from pg_attribute a " "where attrelid = '%s'::oid " *************** *** 2451,2456 **** --- 2452,2458 ---- i_attnotnull = PQfnumber(res, "attnotnull"); i_atthasdef = PQfnumber(res, "atthasdef"); i_attisdropped = PQfnumber(res, "attisdropped"); + i_attislocal = PQfnumber(res, "attislocal"); tbinfo->numatts = ntups; tbinfo->attnames = (char **) malloc(ntups * sizeof(char *)); *************** *** 2458,2463 **** --- 2460,2466 ---- tbinfo->atttypmod = (int *) malloc(ntups * sizeof(int)); tbinfo->attstattarget = (int *) malloc(ntups * sizeof(int)); tbinfo->attisdropped = (bool *) malloc(ntups * sizeof(bool)); + tbinfo->attislocal = (bool *) malloc(ntups * sizeof(bool)); tbinfo->attisserial = (bool *) malloc(ntups * sizeof(bool)); tbinfo->notnull = (bool *) malloc(ntups * sizeof(bool)); tbinfo->adef_expr = (char **) malloc(ntups * sizeof(char *)); *************** *** 2473,2478 **** --- 2476,2482 ---- tbinfo->atttypmod[j] = atoi(PQgetvalue(res, j, i_atttypmod)); tbinfo->attstattarget[j] = atoi(PQgetvalue(res, j, i_attstattarget)); tbinfo->attisdropped[j] = (PQgetvalue(res, j, i_attisdropped)[0] == 't'); + tbinfo->attislocal[j] = (PQgetvalue(res, j, i_attislocal)[0] == 't'); tbinfo->attisserial[j] = false; /* fix below */ tbinfo->notnull[j] = (PQgetvalue(res, j, i_attnotnull)[0] == 't'); tbinfo->adef_expr[j] = NULL; /* fix below */ Index: src/bin/pg_dump//pg_dump.h =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_dump/pg_dump.h,v retrieving revision 1.99 diff -c -r1.99 pg_dump.h *** src/bin/pg_dump//pg_dump.h 2002/09/04 20:31:35 1.99 --- src/bin/pg_dump//pg_dump.h 2002/09/28 17:44:03 *************** *** 129,134 **** --- 129,135 ---- int *atttypmod; /* type-specific type modifiers */ int *attstattarget; /* attribute statistics targets */ bool *attisdropped; /* true if attr is dropped; don't dump it */ + bool *attislocal; /* true if attr has local definition */ bool *attisserial; /* true if attr is serial or bigserial */ /*