diff options
Diffstat (limited to 'src/bin')
| -rw-r--r-- | src/bin/initdb/initdb.c | 11 | ||||
| -rw-r--r-- | src/bin/pg_dump/pg_dump.c | 162 |
2 files changed, 109 insertions, 64 deletions
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index ce5439a1dd..cd31e135de 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -42,7 +42,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * Portions taken from FreeBSD. * - * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.125 2006/10/04 18:58:08 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.126 2006/12/23 00:43:12 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1590,7 +1590,8 @@ setup_depend(void) * dependencies seems hard. * * Note that we deliberately do not pin the system views, which - * haven't been created yet. + * haven't been created yet. Also, no conversions, databases, + * or tablespaces are pinned. * * First delete any already-made entries; PINs override all else, and * must be the only entries for their objects. @@ -1619,6 +1620,12 @@ setup_depend(void) "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " " FROM pg_opclass;\n", "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " + " FROM pg_opfamily;\n", + "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " + " FROM pg_amop;\n", + "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " + " FROM pg_amproc;\n", + "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " " FROM pg_rewrite;\n", "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' " " FROM pg_trigger;\n", diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index c4df03083e..ae8d54936f 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12,7 +12,7 @@ * by PostgreSQL * * IDENTIFICATION - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.453 2006/10/09 23:36:59 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.454 2006/12/23 00:43:12 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -6219,11 +6219,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) int i_oprnegate; int i_oprrest; int i_oprjoin; + int i_oprcanmerge; int i_oprcanhash; - int i_oprlsortop; - int i_oprrsortop; - int i_oprltcmpop; - int i_oprgtcmpop; char *oprkind; char *oprcode; char *oprleft; @@ -6232,11 +6229,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) char *oprnegate; char *oprrest; char *oprjoin; + char *oprcanmerge; char *oprcanhash; - char *oprlsortop; - char *oprrsortop; - char *oprltcmpop; - char *oprgtcmpop; /* Skip if not to be dumped */ if (!oprinfo->dobj.dump || dataOnly) @@ -6258,7 +6252,7 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) /* Make sure we are in proper schema so regoperator works correctly */ selectSourceSchema(oprinfo->dobj.namespace->dobj.name); - if (g_fout->remoteVersion >= 70300) + if (g_fout->remoteVersion >= 80300) { appendPQExpBuffer(query, "SELECT oprkind, " "oprcode::pg_catalog.regprocedure, " @@ -6268,11 +6262,23 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) "oprnegate::pg_catalog.regoperator, " "oprrest::pg_catalog.regprocedure, " "oprjoin::pg_catalog.regprocedure, " - "oprcanhash, " - "oprlsortop::pg_catalog.regoperator, " - "oprrsortop::pg_catalog.regoperator, " - "oprltcmpop::pg_catalog.regoperator, " - "oprgtcmpop::pg_catalog.regoperator " + "oprcanmerge, oprcanhash " + "from pg_catalog.pg_operator " + "where oid = '%u'::pg_catalog.oid", + oprinfo->dobj.catId.oid); + } + else if (g_fout->remoteVersion >= 70300) + { + appendPQExpBuffer(query, "SELECT oprkind, " + "oprcode::pg_catalog.regprocedure, " + "oprleft::pg_catalog.regtype, " + "oprright::pg_catalog.regtype, " + "oprcom::pg_catalog.regoperator, " + "oprnegate::pg_catalog.regoperator, " + "oprrest::pg_catalog.regprocedure, " + "oprjoin::pg_catalog.regprocedure, " + "(oprlsortop != 0) as oprcanmerge, " + "oprcanhash " "from pg_catalog.pg_operator " "where oid = '%u'::pg_catalog.oid", oprinfo->dobj.catId.oid); @@ -6285,8 +6291,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) "CASE WHEN oprright = 0 THEN '-' " "ELSE format_type(oprright, NULL) END as oprright, " "oprcom, oprnegate, oprrest, oprjoin, " - "oprcanhash, oprlsortop, oprrsortop, " - "0 as oprltcmpop, 0 as oprgtcmpop " + "(oprlsortop != 0) as oprcanmerge, " + "oprcanhash " "from pg_operator " "where oid = '%u'::oid", oprinfo->dobj.catId.oid); @@ -6299,8 +6305,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) "CASE WHEN oprright = 0 THEN '-'::name " "ELSE (select typname from pg_type where oid = oprright) END as oprright, " "oprcom, oprnegate, oprrest, oprjoin, " - "oprcanhash, oprlsortop, oprrsortop, " - "0 as oprltcmpop, 0 as oprgtcmpop " + "(oprlsortop != 0) as oprcanmerge, " + "oprcanhash " "from pg_operator " "where oid = '%u'::oid", oprinfo->dobj.catId.oid); @@ -6326,11 +6332,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) i_oprnegate = PQfnumber(res, "oprnegate"); i_oprrest = PQfnumber(res, "oprrest"); i_oprjoin = PQfnumber(res, "oprjoin"); + i_oprcanmerge = PQfnumber(res, "oprcanmerge"); i_oprcanhash = PQfnumber(res, "oprcanhash"); - i_oprlsortop = PQfnumber(res, "oprlsortop"); - i_oprrsortop = PQfnumber(res, "oprrsortop"); - i_oprltcmpop = PQfnumber(res, "oprltcmpop"); - i_oprgtcmpop = PQfnumber(res, "oprgtcmpop"); oprkind = PQgetvalue(res, 0, i_oprkind); oprcode = PQgetvalue(res, 0, i_oprcode); @@ -6340,11 +6343,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) oprnegate = PQgetvalue(res, 0, i_oprnegate); oprrest = PQgetvalue(res, 0, i_oprrest); oprjoin = PQgetvalue(res, 0, i_oprjoin); + oprcanmerge = PQgetvalue(res, 0, i_oprcanmerge); oprcanhash = PQgetvalue(res, 0, i_oprcanhash); - oprlsortop = PQgetvalue(res, 0, i_oprlsortop); - oprrsortop = PQgetvalue(res, 0, i_oprrsortop); - oprltcmpop = PQgetvalue(res, 0, i_oprltcmpop); - oprgtcmpop = PQgetvalue(res, 0, i_oprgtcmpop); appendPQExpBuffer(details, " PROCEDURE = %s", convertRegProcReference(oprcode)); @@ -6390,6 +6390,9 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) if (name) appendPQExpBuffer(details, ",\n NEGATOR = %s", name); + if (strcmp(oprcanmerge, "t") == 0) + appendPQExpBuffer(details, ",\n MERGES"); + if (strcmp(oprcanhash, "t") == 0) appendPQExpBuffer(details, ",\n HASHES"); @@ -6401,22 +6404,6 @@ dumpOpr(Archive *fout, OprInfo *oprinfo) if (name) appendPQExpBuffer(details, ",\n JOIN = %s", name); - name = convertOperatorReference(oprlsortop); - if (name) - appendPQExpBuffer(details, ",\n SORT1 = %s", name); - - name = convertOperatorReference(oprrsortop); - if (name) - appendPQExpBuffer(details, ",\n SORT2 = %s", name); - - name = convertOperatorReference(oprltcmpop); - if (name) - appendPQExpBuffer(details, ",\n LTCMP = %s", name); - - name = convertOperatorReference(oprgtcmpop); - if (name) - appendPQExpBuffer(details, ",\n GTCMP = %s", name); - /* * DROP must be fully qualified in case same name appears in pg_catalog */ @@ -6608,13 +6595,26 @@ dumpOpclass(Archive *fout, OpclassInfo *opcinfo) selectSourceSchema(opcinfo->dobj.namespace->dobj.name); /* Get additional fields from the pg_opclass row */ - appendPQExpBuffer(query, "SELECT opcintype::pg_catalog.regtype, " - "opckeytype::pg_catalog.regtype, " - "opcdefault, " - "(SELECT amname FROM pg_catalog.pg_am WHERE oid = opcamid) AS amname " - "FROM pg_catalog.pg_opclass " - "WHERE oid = '%u'::pg_catalog.oid", - opcinfo->dobj.catId.oid); + if (g_fout->remoteVersion >= 80300) + { + appendPQExpBuffer(query, "SELECT opcintype::pg_catalog.regtype, " + "opckeytype::pg_catalog.regtype, " + "opcdefault, " + "(SELECT amname FROM pg_catalog.pg_am WHERE oid = opcmethod) AS amname " + "FROM pg_catalog.pg_opclass " + "WHERE oid = '%u'::pg_catalog.oid", + opcinfo->dobj.catId.oid); + } + else + { + appendPQExpBuffer(query, "SELECT opcintype::pg_catalog.regtype, " + "opckeytype::pg_catalog.regtype, " + "opcdefault, " + "(SELECT amname FROM pg_catalog.pg_am WHERE oid = opcamid) AS amname " + "FROM pg_catalog.pg_opclass " + "WHERE oid = '%u'::pg_catalog.oid", + opcinfo->dobj.catId.oid); + } res = PQexec(g_conn, query->data); check_sql_result(res, g_conn, query->data, PGRES_TUPLES_OK); @@ -6674,12 +6674,31 @@ dumpOpclass(Archive *fout, OpclassInfo *opcinfo) */ resetPQExpBuffer(query); - appendPQExpBuffer(query, "SELECT amopstrategy, amopreqcheck, " - "amopopr::pg_catalog.regoperator " - "FROM pg_catalog.pg_amop " - "WHERE amopclaid = '%u'::pg_catalog.oid " - "ORDER BY amopstrategy", - opcinfo->dobj.catId.oid); + if (g_fout->remoteVersion >= 80300) + { + /* + * Print only those opfamily members that are tied to the opclass + * by pg_depend entries. + */ + appendPQExpBuffer(query, "SELECT amopstrategy, amopreqcheck, " + "amopopr::pg_catalog.regoperator " + "FROM pg_catalog.pg_amop ao, pg_catalog.pg_depend " + "WHERE refclassid = 'pg_catalog.pg_opclass'::regclass " + "AND refobjid = '%u'::pg_catalog.oid " + "AND classid = 'pg_catalog.pg_amop'::regclass " + "AND objid = ao.oid " + "ORDER BY amopstrategy", + opcinfo->dobj.catId.oid); + } + else + { + appendPQExpBuffer(query, "SELECT amopstrategy, amopreqcheck, " + "amopopr::pg_catalog.regoperator " + "FROM pg_catalog.pg_amop " + "WHERE amopclaid = '%u'::pg_catalog.oid " + "ORDER BY amopstrategy", + opcinfo->dobj.catId.oid); + } res = PQexec(g_conn, query->data); check_sql_result(res, g_conn, query->data, PGRES_TUPLES_OK); @@ -6714,12 +6733,31 @@ dumpOpclass(Archive *fout, OpclassInfo *opcinfo) */ resetPQExpBuffer(query); - appendPQExpBuffer(query, "SELECT amprocnum, " - "amproc::pg_catalog.regprocedure " - "FROM pg_catalog.pg_amproc " - "WHERE amopclaid = '%u'::pg_catalog.oid " - "ORDER BY amprocnum", - opcinfo->dobj.catId.oid); + if (g_fout->remoteVersion >= 80300) + { + /* + * Print only those opfamily members that are tied to the opclass + * by pg_depend entries. + */ + appendPQExpBuffer(query, "SELECT amprocnum, " + "amproc::pg_catalog.regprocedure " + "FROM pg_catalog.pg_amproc ap, pg_catalog.pg_depend " + "WHERE refclassid = 'pg_catalog.pg_opclass'::regclass " + "AND refobjid = '%u'::pg_catalog.oid " + "AND classid = 'pg_catalog.pg_amproc'::regclass " + "AND objid = ap.oid " + "ORDER BY amprocnum", + opcinfo->dobj.catId.oid); + } + else + { + appendPQExpBuffer(query, "SELECT amprocnum, " + "amproc::pg_catalog.regprocedure " + "FROM pg_catalog.pg_amproc " + "WHERE amopclaid = '%u'::pg_catalog.oid " + "ORDER BY amprocnum", + opcinfo->dobj.catId.oid); + } res = PQexec(g_conn, query->data); check_sql_result(res, g_conn, query->data, PGRES_TUPLES_OK); |
