Remove pg_dump/pg_dumpall support for dumping from pre-8.0 servers.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 12 Oct 2016 16:19:56 +0000 (12:19 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 12 Oct 2016 16:20:02 +0000 (12:20 -0400)
The need for dumping from such ancient servers has decreased to about nil
in the field, so let's remove all the code that catered to it.  Aside
from removing a lot of boilerplate variant queries, this allows us to not
have to cope with servers that don't have (a) schemas or (b) pg_depend.
That means we can get rid of assorted squishy code around that.  There
may be some nonobvious additional simplifications possible, but this patch
already removes about 1500 lines of code.

I did not remove the ability for pg_restore to read custom-format archives
generated by these old versions (and light testing says that that does
still work).  If you have an old server, you probably also have a pg_dump
that will work with it; but you have an old custom-format backup file,
that might be all you have.

It'd be possible at this point to remove fmtQualifiedId()'s version
argument, but I refrained since that would affect code outside pg_dump.

Discussion: <2661.1475849167@sss.pgh.pa.us>

doc/src/sgml/ref/pg_dump.sgml
src/bin/pg_dump/dumputils.c
src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump.h
src/bin/pg_dump/pg_dump_sort.c
src/bin/pg_dump/pg_dumpall.c

index be1b684082d85bad03aadaadd8dda962cbeb8891..371a61427d646d33e1b29bb8022dd42d765451c5 100644 (file)
@@ -758,10 +758,9 @@ PostgreSQL documentation
         the dump. Instead fail if unable to lock a table within the specified
         <replaceable class="parameter">timeout</>. The timeout may be
         specified in any of the formats accepted by <command>SET
-        statement_timeout</>.  (Allowed values vary depending on the server
+        statement_timeout</>.  (Allowed formats vary depending on the server
         version you are dumping from, but an integer number of milliseconds
-        is accepted by all versions since 7.3.  This option is ignored when
-        dumping from a pre-7.3 server.)
+        is accepted by all versions.)
        </para>
       </listitem>
      </varlistentry>
@@ -1172,7 +1171,7 @@ CREATE DATABASE foo WITH TEMPLATE template0;
    <productname>PostgreSQL</> server versions newer than
    <application>pg_dump</>'s version.  <application>pg_dump</> can also
    dump from <productname>PostgreSQL</> servers older than its own version.
-   (Currently, servers back to version 7.0 are supported.)
+   (Currently, servers back to version 8.0 are supported.)
    However, <application>pg_dump</> cannot dump from
    <productname>PostgreSQL</> servers newer than its own major version;
    it will refuse to even try, rather than risk making an invalid dump.
index cd1e8c4a680adee7be9c4d072f9e6a71bf96e5e0..0d5166891e87e9fdce81bb2e694b3ea451d89458 100644 (file)
@@ -18,8 +18,6 @@
 #include "fe_utils/string_utils.h"
 
 
-#define supports_grant_options(version) ((version) >= 70400)
-
 static bool parseAclItem(const char *item, const char *type,
             const char *name, const char *subname, int remoteVersion,
             PQExpBuffer grantee, PQExpBuffer grantor,
@@ -246,11 +244,9 @@ buildACLCommands(const char *name, const char *subname,
 
                /*
                 * For the owner, the default privilege level is ALL WITH
-                * GRANT OPTION (only ALL prior to 7.4).
+                * GRANT OPTION.
                 */
-               if (supports_grant_options(remoteVersion)
-                   ? strcmp(privswgo->data, "ALL") != 0
-                   : strcmp(privs->data, "ALL") != 0)
+               if (strcmp(privswgo->data, "ALL") != 0)
                {
                    appendPQExpBuffer(firstsql, "%sREVOKE ALL", prefix);
                    if (subname)
@@ -403,16 +399,19 @@ buildDefaultACLCommands(const char *type, const char *nspname,
  *     username=privilegecodes/grantor
  * or
  *     group groupname=privilegecodes/grantor
- * (the /grantor part will not be present if pre-7.4 database).
+ * (the "group" case occurs only with servers before 8.1).
+ *
+ * Returns true on success, false on parse error.  On success, the components
+ * of the string are returned in the PQExpBuffer parameters.
  *
  * The returned grantee string will be the dequoted username or groupname
- * (preceded with "group " in the latter case).  The returned grantor is
- * the dequoted grantor name or empty.  Privilege characters are decoded
- * and split between privileges with grant option (privswgo) and without
- * (privs).
+ * (preceded with "group " in the latter case).  Note that a grant to PUBLIC
+ * is represented by an empty grantee string.  The returned grantor is the
+ * dequoted grantor name.  Privilege characters are decoded and split between
+ * privileges with grant option (privswgo) and without (privs).
  *
- * Note: for cross-version compatibility, it's important to use ALL when
- * appropriate.
+ * Note: for cross-version compatibility, it's important to use ALL to
+ * represent the privilege sets whenever appropriate.
  */
 static bool
 parseAclItem(const char *item, const char *type,
@@ -439,7 +438,7 @@ parseAclItem(const char *item, const char *type,
        return false;
    }
 
-   /* grantor may be listed after / */
+   /* grantor should appear after / */
    slpos = strchr(eqpos + 1, '/');
    if (slpos)
    {
@@ -452,7 +451,10 @@ parseAclItem(const char *item, const char *type,
        }
    }
    else
-       resetPQExpBuffer(grantor);
+   {
+       free(buf);
+       return false;
+   }
 
    /* privilege codes */
 #define CONVERT_PRIV(code, keywd) \
@@ -490,29 +492,19 @@ do { \
        {
            /* table only */
            CONVERT_PRIV('a', "INSERT");
-           if (remoteVersion >= 70200)
-               CONVERT_PRIV('x', "REFERENCES");
+           CONVERT_PRIV('x', "REFERENCES");
            /* rest are not applicable to columns */
            if (subname == NULL)
            {
-               if (remoteVersion >= 70200)
-               {
-                   CONVERT_PRIV('d', "DELETE");
-                   CONVERT_PRIV('t', "TRIGGER");
-               }
+               CONVERT_PRIV('d', "DELETE");
+               CONVERT_PRIV('t', "TRIGGER");
                if (remoteVersion >= 80400)
                    CONVERT_PRIV('D', "TRUNCATE");
            }
        }
 
        /* UPDATE */
-       if (remoteVersion >= 70200 ||
-           strcmp(type, "SEQUENCE") == 0 ||
-           strcmp(type, "SEQUENCES") == 0)
-           CONVERT_PRIV('w', "UPDATE");
-       else
-           /* 7.0 and 7.1 have a simpler worldview */
-           CONVERT_PRIV('w', "UPDATE,DELETE");
+       CONVERT_PRIV('w', "UPDATE");
    }
    else if (strcmp(type, "FUNCTION") == 0 ||
             strcmp(type, "FUNCTIONS") == 0)
index bba8b6ca9f90813e5193b8e9ba785eef37679eae..e237b4a9c901f0595849e5f78a18cf0ef4d64c7a 100644 (file)
@@ -388,7 +388,7 @@ RestoreArchive(Archive *AHX)
         * target.
         */
        AHX->minRemoteVersion = 0;
-       AHX->maxRemoteVersion = 999999;
+       AHX->maxRemoteVersion = 9999999;
 
        ConnectDatabase(AHX, ropt->dbname,
                        ropt->pghost, ropt->pgport, ropt->username,
index fde7f59c3d03d9f0fa9cee0abaf74b088f487fef..c821f3b0ee199514be8a59aa08cc923b82c3180f 100644 (file)
@@ -96,9 +96,6 @@ bool      g_verbose;          /* User wants verbose narration of our
 /* subquery used to convert user ID (eg, datdba) to user name */
 static const char *username_subquery;
 
-/* obsolete as of 7.3: */
-static Oid g_last_builtin_oid; /* value of the last builtin oid */
-
 /* The specified names/patterns should to match at least one entity */
 static int strict_names = 0;
 
@@ -142,7 +139,7 @@ static void expand_table_name_patterns(Archive *fout,
                           SimpleStringList *patterns,
                           SimpleOidList *oids,
                           bool strict_names);
-static NamespaceInfo *findNamespace(Archive *fout, Oid nsoid, Oid objoid);
+static NamespaceInfo *findNamespace(Archive *fout, Oid nsoid);
 static void dumpTableData(Archive *fout, TableDataInfo *tdinfo);
 static void refreshMatViewData(Archive *fout, TableDataInfo *tdinfo);
 static void guessConstraintInheritance(TableInfo *tblinfo, int numTables);
@@ -236,11 +233,8 @@ static char *convertRegProcReference(Archive *fout,
                        const char *proc);
 static char *convertOperatorReference(Archive *fout, const char *opr);
 static char *convertTSFunction(Archive *fout, Oid funcOid);
-static Oid findLastBuiltinOid_V71(Archive *fout, const char *);
-static Oid findLastBuiltinOid_V70(Archive *fout);
 static void selectSourceSchema(Archive *fout, const char *schemaName);
 static char *getFormattedTypeName(Archive *fout, Oid oid, OidOptions opts);
-static char *myFormatType(const char *typname, int32 typmod);
 static void getBlobs(Archive *fout);
 static void dumpBlob(Archive *fout, BlobInfo *binfo);
 static int dumpBlobs(Archive *fout, void *arg);
@@ -633,10 +627,10 @@ main(int argc, char **argv)
    fout->verbose = g_verbose;
 
    /*
-    * We allow the server to be back to 7.0, and up to any minor release of
+    * We allow the server to be back to 8.0, and up to any minor release of
     * our own major version.  (See also version check in pg_dumpall.c.)
     */
-   fout->minRemoteVersion = 70000;
+   fout->minRemoteVersion = 80000;
    fout->maxRemoteVersion = (PG_VERSION_NUM / 100) * 100 + 99;
 
    fout->numWorkers = numWorkers;
@@ -665,10 +659,8 @@ main(int argc, char **argv)
    /* Select the appropriate subquery to convert user IDs to names */
    if (fout->remoteVersion >= 80100)
        username_subquery = "SELECT rolname FROM pg_catalog.pg_roles WHERE oid =";
-   else if (fout->remoteVersion >= 70300)
-       username_subquery = "SELECT usename FROM pg_catalog.pg_user WHERE usesysid =";
    else
-       username_subquery = "SELECT usename FROM pg_user WHERE usesysid =";
+       username_subquery = "SELECT usename FROM pg_catalog.pg_user WHERE usesysid =";
 
    /* check the version for the synchronized snapshots feature */
    if (numWorkers > 1 && fout->remoteVersion < 90200
@@ -683,18 +675,6 @@ main(int argc, char **argv)
        exit_horribly(NULL,
           "Exported snapshots are not supported by this server version.\n");
 
-   /* Find the last built-in OID, if needed */
-   if (fout->remoteVersion < 70300)
-   {
-       if (fout->remoteVersion >= 70100)
-           g_last_builtin_oid = findLastBuiltinOid_V71(fout,
-                                                 PQdb(GetConnection(fout)));
-       else
-           g_last_builtin_oid = findLastBuiltinOid_V70(fout);
-       if (g_verbose)
-           write_msg(NULL, "last built-in OID is %u\n", g_last_builtin_oid);
-   }
-
    /* Expand schema selection patterns into OID lists */
    if (schema_include_patterns.head != NULL)
    {
@@ -774,16 +754,11 @@ main(int argc, char **argv)
    /*
     * Sort the objects into a safe dump order (no forward references).
     *
-    * In 7.3 or later, we can rely on dependency information to help us
-    * determine a safe order, so the initial sort is mostly for cosmetic
-    * purposes: we sort by name to ensure that logically identical schemas
-    * will dump identically.  Before 7.3 we don't have dependencies and we
-    * use OID ordering as an (unreliable) guide to creation order.
+    * We rely on dependency information to help us determine a safe order, so
+    * the initial sort is mostly for cosmetic purposes: we sort by name to
+    * ensure that logically identical schemas will dump identically.
     */
-   if (fout->remoteVersion >= 70300)
-       sortDumpableObjectsByTypeName(dobjs, numObjs);
-   else
-       sortDumpableObjectsByTypeOid(dobjs, numObjs);
+   sortDumpableObjectsByTypeName(dobjs, numObjs);
 
    /* If we do a parallel dump, we want the largest tables to go first */
    if (archiveFormat == archDirectory && numWorkers > 1)
@@ -1000,12 +975,12 @@ setup_connection(Archive *AH, const char *dumpencoding,
        ExecuteSqlStatement(AH, "SET INTERVALSTYLE = POSTGRES");
 
    /*
-    * If supported, set extra_float_digits so that we can dump float data
-    * exactly (given correctly implemented float I/O code, anyway)
+    * Set extra_float_digits so that we can dump float data exactly (given
+    * correctly implemented float I/O code, anyway)
     */
    if (AH->remoteVersion >= 90000)
        ExecuteSqlStatement(AH, "SET extra_float_digits TO 3");
-   else if (AH->remoteVersion >= 70400)
+   else
        ExecuteSqlStatement(AH, "SET extra_float_digits TO 2");
 
    /*
@@ -1018,8 +993,7 @@ setup_connection(Archive *AH, const char *dumpencoding,
    /*
     * Disable timeouts if supported.
     */
-   if (AH->remoteVersion >= 70300)
-       ExecuteSqlStatement(AH, "SET statement_timeout = 0");
+   ExecuteSqlStatement(AH, "SET statement_timeout = 0");
    if (AH->remoteVersion >= 90300)
        ExecuteSqlStatement(AH, "SET lock_timeout = 0");
    if (AH->remoteVersion >= 90600)
@@ -1065,16 +1039,12 @@ setup_connection(Archive *AH, const char *dumpencoding,
                                "SET TRANSACTION ISOLATION LEVEL "
                                "REPEATABLE READ, READ ONLY");
    }
-   else if (AH->remoteVersion >= 70400)
+   else
    {
-       /* note: comma was not accepted in SET TRANSACTION before 8.0 */
        ExecuteSqlStatement(AH,
                            "SET TRANSACTION ISOLATION LEVEL "
-                           "SERIALIZABLE READ ONLY");
+                           "SERIALIZABLE, READ ONLY");
    }
-   else
-       ExecuteSqlStatement(AH,
-                           "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE");
 
    /*
     * If user specified a snapshot to use, select that.  In a parallel dump
@@ -1190,9 +1160,6 @@ expand_schema_name_patterns(Archive *fout,
    if (patterns->head == NULL)
        return;                 /* nothing to do */
 
-   if (fout->remoteVersion < 70300)
-       exit_horribly(NULL, "server version must be at least 7.3 to use schema selection switches\n");
-
    query = createPQExpBuffer();
 
    /*
@@ -1661,15 +1628,12 @@ dumpTableData_copy(Archive *fout, void *dcontext)
    selectSourceSchema(fout, tbinfo->dobj.namespace->dobj.name);
 
    /*
-    * If possible, specify the column list explicitly so that we have no
-    * possibility of retrieving data in the wrong column order.  (The default
-    * column ordering of COPY will not be what we want in certain corner
-    * cases involving ADD COLUMN and inheritance.)
+    * Specify the column list explicitly so that we have no possibility of
+    * retrieving data in the wrong column order.  (The default column
+    * ordering of COPY will not be what we want in certain corner cases
+    * involving ADD COLUMN and inheritance.)
     */
-   if (fout->remoteVersion >= 70300)
-       column_list = fmtCopyColumnList(tbinfo, clistBuf);
-   else
-       column_list = "";       /* can't select columns in COPY */
+   column_list = fmtCopyColumnList(tbinfo, clistBuf);
 
    if (oids && hasoids)
    {
@@ -1829,22 +1793,11 @@ dumpTableData_insert(Archive *fout, void *dcontext)
     */
    selectSourceSchema(fout, tbinfo->dobj.namespace->dobj.name);
 
-   if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(q, "DECLARE _pg_dump_cursor CURSOR FOR "
-                         "SELECT * FROM ONLY %s",
-                         fmtQualifiedId(fout->remoteVersion,
-                                        tbinfo->dobj.namespace->dobj.name,
-                                        classname));
-   }
-   else
-   {
-       appendPQExpBuffer(q, "DECLARE _pg_dump_cursor CURSOR FOR "
-                         "SELECT * FROM %s",
-                         fmtQualifiedId(fout->remoteVersion,
-                                        tbinfo->dobj.namespace->dobj.name,
-                                        classname));
-   }
+   appendPQExpBuffer(q, "DECLARE _pg_dump_cursor CURSOR FOR "
+                     "SELECT * FROM ONLY %s",
+                     fmtQualifiedId(fout->remoteVersion,
+                                    tbinfo->dobj.namespace->dobj.name,
+                                    classname));
    if (tdinfo->filtercond)
        appendPQExpBuffer(q, " %s", tdinfo->filtercond);
 
@@ -2480,7 +2433,7 @@ dumpDatabase(Archive *fout)
                          username_subquery);
        appendStringLiteralAH(dbQry, datname, fout);
    }
-   else if (fout->remoteVersion >= 80000)
+   else
    {
        appendPQExpBuffer(dbQry, "SELECT tableoid, oid, "
                          "(%s datdba) AS dba, "
@@ -2492,34 +2445,6 @@ dumpDatabase(Archive *fout)
                          username_subquery);
        appendStringLiteralAH(dbQry, datname, fout);
    }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(dbQry, "SELECT tableoid, oid, "
-                         "(%s datdba) AS dba, "
-                         "pg_encoding_to_char(encoding) AS encoding, "
-                         "NULL AS datcollate, NULL AS datctype, "
-                         "0 AS datfrozenxid, 0 AS datminmxid, "
-                         "NULL AS tablespace "
-                         "FROM pg_database "
-                         "WHERE datname = ",
-                         username_subquery);
-       appendStringLiteralAH(dbQry, datname, fout);
-   }
-   else
-   {
-       appendPQExpBuffer(dbQry, "SELECT "
-                         "(SELECT oid FROM pg_class WHERE relname = 'pg_database') AS tableoid, "
-                         "oid, "
-                         "(%s datdba) AS dba, "
-                         "pg_encoding_to_char(encoding) AS encoding, "
-                         "NULL AS datcollate, NULL AS datctype, "
-                         "0 AS datfrozenxid, 0 AS datminmxid, "
-                         "NULL AS tablespace "
-                         "FROM pg_database "
-                         "WHERE datname = ",
-                         username_subquery);
-       appendStringLiteralAH(dbQry, datname, fout);
-   }
 
    res = ExecuteSqlQueryForSingleRow(fout, dbQry->data);
 
@@ -2879,19 +2804,13 @@ getBlobs(Archive *fout)
                          "NULL AS initrlomacl "
                          " FROM pg_largeobject_metadata",
                          username_subquery);
-   else if (fout->remoteVersion >= 70100)
+   else
        appendPQExpBufferStr(blobQry,
                             "SELECT DISTINCT loid AS oid, "
                             "NULL::name AS rolname, NULL::oid AS lomacl, "
                             "NULL::oid AS rlomacl, NULL::oid AS initlomacl, "
                             "NULL::oid AS initrlomacl "
                             " FROM pg_largeobject");
-   else
-       appendPQExpBufferStr(blobQry,
-                            "SELECT oid, NULL AS rolname, NULL AS lomacl, "
-                            "NULL AS rlomacl, NULL AS initlomacl, "
-                            "NULL AS initrlomacl "
-                            " FROM pg_class WHERE relkind = 'l'");
 
    res = ExecuteSqlQuery(fout, blobQry->data, PGRES_TUPLES_OK);
 
@@ -3031,10 +2950,8 @@ dumpBlobs(Archive *fout, void *arg)
     */
    if (fout->remoteVersion >= 90000)
        blobQry = "DECLARE bloboid CURSOR FOR SELECT oid FROM pg_largeobject_metadata";
-   else if (fout->remoteVersion >= 70100)
-       blobQry = "DECLARE bloboid CURSOR FOR SELECT DISTINCT loid FROM pg_largeobject";
    else
-       blobQry = "DECLARE bloboid CURSOR FOR SELECT oid FROM pg_class WHERE relkind = 'l'";
+       blobQry = "DECLARE bloboid CURSOR FOR SELECT DISTINCT loid FROM pg_largeobject";
 
    ExecuteSqlStatement(fout, blobQry);
 
@@ -3536,45 +3453,6 @@ getNamespaces(Archive *fout, int *numNamespaces)
    int         i_initnspacl;
    int         i_initrnspacl;
 
-   /*
-    * Before 7.3, there are no real namespaces; create two dummy entries, one
-    * for user stuff and one for system stuff.
-    */
-   if (fout->remoteVersion < 70300)
-   {
-       nsinfo = (NamespaceInfo *) pg_malloc(2 * sizeof(NamespaceInfo));
-
-       nsinfo[0].dobj.objType = DO_NAMESPACE;
-       nsinfo[0].dobj.catId.tableoid = 0;
-       nsinfo[0].dobj.catId.oid = 0;
-       AssignDumpId(&nsinfo[0].dobj);
-       nsinfo[0].dobj.name = pg_strdup("public");
-       nsinfo[0].rolname = pg_strdup("");
-       nsinfo[0].nspacl = pg_strdup("");
-       nsinfo[0].rnspacl = pg_strdup("");
-       nsinfo[0].initnspacl = pg_strdup("");
-       nsinfo[0].initrnspacl = pg_strdup("");
-
-       selectDumpableNamespace(&nsinfo[0], fout);
-
-       nsinfo[1].dobj.objType = DO_NAMESPACE;
-       nsinfo[1].dobj.catId.tableoid = 0;
-       nsinfo[1].dobj.catId.oid = 1;
-       AssignDumpId(&nsinfo[1].dobj);
-       nsinfo[1].dobj.name = pg_strdup("pg_catalog");
-       nsinfo[1].rolname = pg_strdup("");
-       nsinfo[1].nspacl = pg_strdup("");
-       nsinfo[1].rnspacl = pg_strdup("");
-       nsinfo[1].initnspacl = pg_strdup("");
-       nsinfo[1].initrnspacl = pg_strdup("");
-
-       selectDumpableNamespace(&nsinfo[1], fout);
-
-       *numNamespaces = 2;
-
-       return nsinfo;
-   }
-
    query = createPQExpBuffer();
 
    /* Make sure we are in proper schema */
@@ -3684,37 +3562,16 @@ getNamespaces(Archive *fout, int *numNamespaces)
 
 /*
  * findNamespace:
- *     given a namespace OID and an object OID, look up the info read by
- *     getNamespaces
- *
- * NB: for pre-7.3 source database, we use object OID to guess whether it's
- * a system object or not.  In 7.3 and later there is no guessing, and we
- * don't use objoid at all.
+ *     given a namespace OID, look up the info read by getNamespaces
  */
 static NamespaceInfo *
-findNamespace(Archive *fout, Oid nsoid, Oid objoid)
+findNamespace(Archive *fout, Oid nsoid)
 {
    NamespaceInfo *nsinfo;
 
-   if (fout->remoteVersion >= 70300)
-   {
-       nsinfo = findNamespaceByOid(nsoid);
-   }
-   else
-   {
-       /* This code depends on the dummy objects set up by getNamespaces. */
-       Oid         i;
-
-       if (objoid > g_last_builtin_oid)
-           i = 0;              /* user object */
-       else
-           i = 1;              /* system object */
-       nsinfo = findNamespaceByOid(i);
-   }
-
+   nsinfo = findNamespaceByOid(nsoid);
    if (nsinfo == NULL)
        exit_horribly(NULL, "schema with OID %u does not exist\n", nsoid);
-
    return nsinfo;
 }
 
@@ -3932,7 +3789,7 @@ getTypes(Archive *fout, int *numTypes)
                          "FROM pg_type",
                          username_subquery);
    }
-   else if (fout->remoteVersion >= 70300)
+   else
    {
        appendPQExpBuffer(query, "SELECT tableoid, oid, typname, "
                          "typnamespace, NULL AS typacl, NULL as rtypacl, "
@@ -3947,38 +3804,6 @@ getTypes(Archive *fout, int *numTypes)
                          "FROM pg_type",
                          username_subquery);
    }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query, "SELECT tableoid, oid, typname, "
-                 "0::oid AS typnamespace, NULL AS typacl, NULL as rtypacl, "
-                         "NULL AS inittypacl, NULL AS initrtypacl, "
-                         "(%s typowner) AS rolname, "
-                         "typinput::oid AS typinput, "
-                         "typoutput::oid AS typoutput, typelem, typrelid, "
-                         "CASE WHEN typrelid = 0 THEN ' '::\"char\" "
-                         "ELSE (SELECT relkind FROM pg_class WHERE oid = typrelid) END AS typrelkind, "
-                         "typtype, typisdefined, "
-                         "typname[0] = '_' AND typelem != 0 AS isarray "
-                         "FROM pg_type",
-                         username_subquery);
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT "
-        "(SELECT oid FROM pg_class WHERE relname = 'pg_type') AS tableoid, "
-                         "oid, typname, "
-                 "0::oid AS typnamespace, NULL AS typacl, NULL as rtypacl, "
-                         "NULL AS inittypacl, NULL AS initrtypacl, "
-                         "(%s typowner) AS rolname, "
-                         "typinput::oid AS typinput, "
-                         "typoutput::oid AS typoutput, typelem, typrelid, "
-                         "CASE WHEN typrelid = 0 THEN ' '::\"char\" "
-                         "ELSE (SELECT relkind FROM pg_class WHERE oid = typrelid) END AS typrelkind, "
-                         "typtype, typisdefined, "
-                         "typname[0] = '_' AND typelem != 0 AS isarray "
-                         "FROM pg_type",
-                         username_subquery);
-   }
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -4013,8 +3838,7 @@ getTypes(Archive *fout, int *numTypes)
        tyinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_typname));
        tyinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_typnamespace)),
-                         tyinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_typnamespace)));
        tyinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
        tyinfo[i].typacl = pg_strdup(PQgetvalue(res, i, i_typacl));
        tyinfo[i].rtypacl = pg_strdup(PQgetvalue(res, i, i_rtypacl));
@@ -4083,48 +3907,6 @@ getTypes(Archive *fout, int *numTypes)
             * this is taken care of while sorting dependencies.
             */
            stinfo->dobj.dump = DUMP_COMPONENT_NONE;
-
-           /*
-            * However, if dumping from pre-7.3, there will be no dependency
-            * info so we have to fake it here.  We only need to worry about
-            * typinput and typoutput since the other functions only exist
-            * post-7.3.
-            */
-           if (fout->remoteVersion < 70300)
-           {
-               Oid         typinput;
-               Oid         typoutput;
-               FuncInfo   *funcInfo;
-
-               typinput = atooid(PQgetvalue(res, i, i_typinput));
-               typoutput = atooid(PQgetvalue(res, i, i_typoutput));
-
-               funcInfo = findFuncByOid(typinput);
-               if (funcInfo && funcInfo->dobj.dump & DUMP_COMPONENT_DEFINITION)
-               {
-                   /* base type depends on function */
-                   addObjectDependency(&tyinfo[i].dobj,
-                                       funcInfo->dobj.dumpId);
-                   /* function depends on shell type */
-                   addObjectDependency(&funcInfo->dobj,
-                                       stinfo->dobj.dumpId);
-                   /* mark shell type as to be dumped */
-                   stinfo->dobj.dump = DUMP_COMPONENT_ALL;
-               }
-
-               funcInfo = findFuncByOid(typoutput);
-               if (funcInfo && funcInfo->dobj.dump & DUMP_COMPONENT_DEFINITION)
-               {
-                   /* base type depends on function */
-                   addObjectDependency(&tyinfo[i].dobj,
-                                       funcInfo->dobj.dumpId);
-                   /* function depends on shell type */
-                   addObjectDependency(&funcInfo->dobj,
-                                       stinfo->dobj.dumpId);
-                   /* mark shell type as to be dumped */
-                   stinfo->dobj.dump = DUMP_COMPONENT_ALL;
-               }
-           }
        }
 
        if (strlen(tyinfo[i].rolname) == 0)
@@ -4172,38 +3954,13 @@ getOperators(Archive *fout, int *numOprs)
    /* Make sure we are in proper schema */
    selectSourceSchema(fout, "pg_catalog");
 
-   if (fout->remoteVersion >= 70300)
-   {
-       appendPQExpBuffer(query, "SELECT tableoid, oid, oprname, "
-                         "oprnamespace, "
-                         "(%s oprowner) AS rolname, "
-                         "oprkind, "
-                         "oprcode::oid AS oprcode "
-                         "FROM pg_operator",
-                         username_subquery);
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query, "SELECT tableoid, oid, oprname, "
-                         "0::oid AS oprnamespace, "
-                         "(%s oprowner) AS rolname, "
-                         "oprkind, "
-                         "oprcode::oid AS oprcode "
-                         "FROM pg_operator",
-                         username_subquery);
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT "
-                         "(SELECT oid FROM pg_class WHERE relname = 'pg_operator') AS tableoid, "
-                         "oid, oprname, "
-                         "0::oid AS oprnamespace, "
-                         "(%s oprowner) AS rolname, "
-                         "oprkind, "
-                         "oprcode::oid AS oprcode "
-                         "FROM pg_operator",
-                         username_subquery);
-   }
+   appendPQExpBuffer(query, "SELECT tableoid, oid, oprname, "
+                     "oprnamespace, "
+                     "(%s oprowner) AS rolname, "
+                     "oprkind, "
+                     "oprcode::oid AS oprcode "
+                     "FROM pg_operator",
+                     username_subquery);
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -4229,8 +3986,7 @@ getOperators(Archive *fout, int *numOprs)
        oprinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_oprname));
        oprinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_oprnamespace)),
-                         oprinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_oprnamespace)));
        oprinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
        oprinfo[i].oprkind = (PQgetvalue(res, i, i_oprkind))[0];
        oprinfo[i].oprcode = atooid(PQgetvalue(res, i, i_oprcode));
@@ -4319,8 +4075,7 @@ getCollations(Archive *fout, int *numCollations)
        collinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_collname));
        collinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_collnamespace)),
-                         collinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_collnamespace)));
        collinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
 
        /* Decide whether we want to dump it */
@@ -4358,13 +4113,6 @@ getConversions(Archive *fout, int *numConversions)
    int         i_connamespace;
    int         i_rolname;
 
-   /* Conversions didn't exist pre-7.3 */
-   if (fout->remoteVersion < 70300)
-   {
-       *numConversions = 0;
-       return NULL;
-   }
-
    query = createPQExpBuffer();
 
    /*
@@ -4403,8 +4151,7 @@ getConversions(Archive *fout, int *numConversions)
        convinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_conname));
        convinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_connamespace)),
-                         convinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_connamespace)));
        convinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
 
        /* Decide whether we want to dump it */
@@ -4527,30 +4274,11 @@ getOpclasses(Archive *fout, int *numOpclasses)
    /* Make sure we are in proper schema */
    selectSourceSchema(fout, "pg_catalog");
 
-   if (fout->remoteVersion >= 70300)
-   {
-       appendPQExpBuffer(query, "SELECT tableoid, oid, opcname, "
-                         "opcnamespace, "
-                         "(%s opcowner) AS rolname "
-                         "FROM pg_opclass",
-                         username_subquery);
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBufferStr(query, "SELECT tableoid, oid, opcname, "
-                            "0::oid AS opcnamespace, "
-                            "''::name AS rolname "
-                            "FROM pg_opclass");
-   }
-   else
-   {
-       appendPQExpBufferStr(query, "SELECT "
-                            "(SELECT oid FROM pg_class WHERE relname = 'pg_opclass') AS tableoid, "
-                            "oid, opcname, "
-                            "0::oid AS opcnamespace, "
-                            "''::name AS rolname "
-                            "FROM pg_opclass");
-   }
+   appendPQExpBuffer(query, "SELECT tableoid, oid, opcname, "
+                     "opcnamespace, "
+                     "(%s opcowner) AS rolname "
+                     "FROM pg_opclass",
+                     username_subquery);
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -4574,8 +4302,7 @@ getOpclasses(Archive *fout, int *numOpclasses)
        opcinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_opcname));
        opcinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_opcnamespace)),
-                         opcinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_opcnamespace)));
        opcinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
 
        /* Decide whether we want to dump it */
@@ -4584,12 +4311,9 @@ getOpclasses(Archive *fout, int *numOpclasses)
        /* Op Classes do not currently have ACLs. */
        opcinfo[i].dobj.dump &= ~DUMP_COMPONENT_ACL;
 
-       if (fout->remoteVersion >= 70300)
-       {
-           if (strlen(opcinfo[i].rolname) == 0)
-               write_msg(NULL, "WARNING: owner of operator class \"%s\" appears to be invalid\n",
-                         opcinfo[i].dobj.name);
-       }
+       if (strlen(opcinfo[i].rolname) == 0)
+           write_msg(NULL, "WARNING: owner of operator class \"%s\" appears to be invalid\n",
+                     opcinfo[i].dobj.name);
    }
 
    PQclear(res);
@@ -4665,8 +4389,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
        opfinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_opfname));
        opfinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_opfnamespace)),
-                         opfinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_opfnamespace)));
        opfinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
 
        /* Decide whether we want to dump it */
@@ -4675,12 +4398,9 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
        /* Extensions do not currently have ACLs. */
        opfinfo[i].dobj.dump &= ~DUMP_COMPONENT_ACL;
 
-       if (fout->remoteVersion >= 70300)
-       {
-           if (strlen(opfinfo[i].rolname) == 0)
-               write_msg(NULL, "WARNING: owner of operator family \"%s\" appears to be invalid\n",
-                         opfinfo[i].dobj.name);
-       }
+       if (strlen(opfinfo[i].rolname) == 0)
+           write_msg(NULL, "WARNING: owner of operator family \"%s\" appears to be invalid\n",
+                     opfinfo[i].dobj.name);
    }
 
    PQclear(res);
@@ -4798,7 +4518,7 @@ getAggregates(Archive *fout, int *numAggs)
                                 "deptype = 'e')");
        appendPQExpBufferChar(query, ')');
    }
-   else if (fout->remoteVersion >= 70300)
+   else
    {
        appendPQExpBuffer(query, "SELECT tableoid, oid, proname AS aggname, "
                          "pronamespace AS aggnamespace, "
@@ -4814,38 +4534,6 @@ getAggregates(Archive *fout, int *numAggs)
               "(SELECT oid FROM pg_namespace WHERE nspname = 'pg_catalog')",
                          username_subquery);
    }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query, "SELECT tableoid, oid, aggname, "
-                         "0::oid AS aggnamespace, "
-                 "CASE WHEN aggbasetype = 0 THEN 0 ELSE 1 END AS pronargs, "
-                         "aggbasetype AS proargtypes, "
-                         "(%s aggowner) AS rolname, "
-                         "NULL AS aggacl, "
-                         "NULL AS raggacl, "
-                         "NULL AS initaggacl, NULL AS initraggacl "
-                         "FROM pg_aggregate "
-                         "where oid > '%u'::oid",
-                         username_subquery,
-                         g_last_builtin_oid);
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT "
-                         "(SELECT oid FROM pg_class WHERE relname = 'pg_aggregate') AS tableoid, "
-                         "oid, aggname, "
-                         "0::oid AS aggnamespace, "
-                 "CASE WHEN aggbasetype = 0 THEN 0 ELSE 1 END AS pronargs, "
-                         "aggbasetype AS proargtypes, "
-                         "(%s aggowner) AS rolname, "
-                         "NULL AS aggacl, "
-                         "NULL AS raggacl, "
-                         "NULL AS initaggacl, NULL AS initraggacl "
-                         "FROM pg_aggregate "
-                         "where oid > '%u'::oid",
-                         username_subquery,
-                         g_last_builtin_oid);
-   }
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -4875,8 +4563,7 @@ getAggregates(Archive *fout, int *numAggs)
        agginfo[i].aggfn.dobj.name = pg_strdup(PQgetvalue(res, i, i_aggname));
        agginfo[i].aggfn.dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_aggnamespace)),
-                         agginfo[i].aggfn.dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_aggnamespace)));
        agginfo[i].aggfn.rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
        if (strlen(agginfo[i].aggfn.rolname) == 0)
            write_msg(NULL, "WARNING: owner of aggregate function \"%s\" appears to be invalid\n",
@@ -4893,13 +4580,9 @@ getAggregates(Archive *fout, int *numAggs)
        else
        {
            agginfo[i].aggfn.argtypes = (Oid *) pg_malloc(agginfo[i].aggfn.nargs * sizeof(Oid));
-           if (fout->remoteVersion >= 70300)
-               parseOidArray(PQgetvalue(res, i, i_proargtypes),
-                             agginfo[i].aggfn.argtypes,
-                             agginfo[i].aggfn.nargs);
-           else
-               /* it's just aggbasetype */
-               agginfo[i].aggfn.argtypes[0] = atooid(PQgetvalue(res, i, i_proargtypes));
+           parseOidArray(PQgetvalue(res, i, i_proargtypes),
+                         agginfo[i].aggfn.argtypes,
+                         agginfo[i].aggfn.nargs);
        }
 
        /* Decide whether we want to dump it */
@@ -5025,7 +4708,7 @@ getFuncs(Archive *fout, int *numFuncs)
        destroyPQExpBuffer(initacl_subquery);
        destroyPQExpBuffer(initracl_subquery);
    }
-   else if (fout->remoteVersion >= 70300)
+   else
    {
        appendPQExpBuffer(query,
                          "SELECT tableoid, oid, proname, prolang, "
@@ -5056,39 +4739,6 @@ getFuncs(Archive *fout, int *numFuncs)
                                 "deptype = 'e')");
        appendPQExpBufferChar(query, ')');
    }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query,
-                         "SELECT tableoid, oid, proname, prolang, "
-                         "pronargs, proargtypes, prorettype, "
-                         "NULL AS proacl, "
-                         "NULL AS rproacl, "
-                         "NULL as initproacl, NULL AS initrproacl, "
-                         "0::oid AS pronamespace, "
-                         "(%s proowner) AS rolname "
-                         "FROM pg_proc "
-                         "WHERE pg_proc.oid > '%u'::oid",
-                         username_subquery,
-                         g_last_builtin_oid);
-   }
-   else
-   {
-       appendPQExpBuffer(query,
-                         "SELECT "
-                         "(SELECT oid FROM pg_class "
-                         " WHERE relname = 'pg_proc') AS tableoid, "
-                         "oid, proname, prolang, "
-                         "pronargs, proargtypes, prorettype, "
-                         "NULL AS proacl, "
-                         "NULL AS rproacl, "
-                         "NULL as initproacl, NULL AS initrproacl, "
-                         "0::oid AS pronamespace, "
-                         "(%s proowner) AS rolname "
-                         "FROM pg_proc "
-                         "where pg_proc.oid > '%u'::oid",
-                         username_subquery,
-                         g_last_builtin_oid);
-   }
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -5121,8 +4771,7 @@ getFuncs(Archive *fout, int *numFuncs)
        finfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_proname));
        finfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_pronamespace)),
-                         finfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_pronamespace)));
        finfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
        finfo[i].lang = atooid(PQgetvalue(res, i, i_prolang));
        finfo[i].prorettype = atooid(PQgetvalue(res, i, i_prorettype));
@@ -5645,7 +5294,7 @@ getTables(Archive *fout, int *numTables)
                          RELKIND_RELATION, RELKIND_SEQUENCE,
                          RELKIND_VIEW, RELKIND_COMPOSITE_TYPE);
    }
-   else if (fout->remoteVersion >= 80000)
+   else
    {
        /*
         * Left join to pick up dependency info linking sequences to their
@@ -5686,153 +5335,6 @@ getTables(Archive *fout, int *numTables)
                          RELKIND_RELATION, RELKIND_SEQUENCE,
                          RELKIND_VIEW, RELKIND_COMPOSITE_TYPE);
    }
-   else if (fout->remoteVersion >= 70300)
-   {
-       /*
-        * Left join to pick up dependency info linking sequences to their
-        * owning column, if any
-        */
-       appendPQExpBuffer(query,
-                         "SELECT c.tableoid, c.oid, relname, "
-                         "relacl, NULL as rrelacl, "
-                         "NULL AS initrelacl, NULL AS initrrelacl, "
-                         "relkind, relnamespace, "
-                         "(%s relowner) AS rolname, "
-                         "relchecks, (reltriggers <> 0) AS relhastriggers, "
-                         "relhasindex, relhasrules, relhasoids, "
-                         "'f'::bool AS relrowsecurity, "
-                         "'f'::bool AS relforcerowsecurity, "
-                         "0 AS relfrozenxid, 0 AS relminmxid,"
-                         "0 AS toid, "
-                         "0 AS tfrozenxid, 0 AS tminmxid,"
-                         "'p' AS relpersistence, 't' as relispopulated, "
-                         "'d' AS relreplident, relpages, "
-                         "NULL AS reloftype, "
-                         "d.refobjid AS owning_tab, "
-                         "d.refobjsubid AS owning_col, "
-                         "NULL AS reltablespace, "
-                         "NULL AS reloptions, "
-                         "NULL AS toast_reloptions, "
-                         "NULL AS changed_acl "
-                         "FROM pg_class c "
-                         "LEFT JOIN pg_depend d ON "
-                         "(c.relkind = '%c' AND "
-                         "d.classid = c.tableoid AND d.objid = c.oid AND "
-                         "d.objsubid = 0 AND "
-                         "d.refclassid = c.tableoid AND d.deptype = 'i') "
-                         "WHERE relkind IN ('%c', '%c', '%c', '%c') "
-                         "ORDER BY c.oid",
-                         username_subquery,
-                         RELKIND_SEQUENCE,
-                         RELKIND_RELATION, RELKIND_SEQUENCE,
-                         RELKIND_VIEW, RELKIND_COMPOSITE_TYPE);
-   }
-   else if (fout->remoteVersion >= 70200)
-   {
-       appendPQExpBuffer(query,
-                         "SELECT tableoid, oid, relname, relacl, "
-                         "NULL as rrelacl, "
-                         "NULL AS initrelacl, NULL AS initrrelacl, "
-                         "relkind, "
-                         "0::oid AS relnamespace, "
-                         "(%s relowner) AS rolname, "
-                         "relchecks, (reltriggers <> 0) AS relhastriggers, "
-                         "relhasindex, relhasrules, relhasoids, "
-                         "'f'::bool AS relrowsecurity, "
-                         "'f'::bool AS relforcerowsecurity, "
-                         "0 AS relfrozenxid, 0 AS relminmxid,"
-                         "0 AS toid, "
-                         "0 AS tfrozenxid, 0 AS tminmxid,"
-                         "'p' AS relpersistence, 't' as relispopulated, "
-                         "'d' AS relreplident, relpages, "
-                         "NULL AS reloftype, "
-                         "NULL::oid AS owning_tab, "
-                         "NULL::int4 AS owning_col, "
-                         "NULL AS reltablespace, "
-                         "NULL AS reloptions, "
-                         "NULL AS toast_reloptions, "
-                         "NULL AS changed_acl "
-                         "FROM pg_class "
-                         "WHERE relkind IN ('%c', '%c', '%c') "
-                         "ORDER BY oid",
-                         username_subquery,
-                         RELKIND_RELATION, RELKIND_SEQUENCE, RELKIND_VIEW);
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       /* all tables have oids in 7.1 */
-       appendPQExpBuffer(query,
-                         "SELECT tableoid, oid, relname, relacl, "
-                         "NULL as rrelacl, "
-                         "NULL AS initrelacl, NULL AS initrrelacl, "
-                         "relkind, "
-                         "0::oid AS relnamespace, "
-                         "(%s relowner) AS rolname, "
-                         "relchecks, (reltriggers <> 0) AS relhastriggers, "
-                         "relhasindex, relhasrules, "
-                         "'t'::bool AS relhasoids, "
-                         "'f'::bool AS relrowsecurity, "
-                         "'f'::bool AS relforcerowsecurity, "
-                         "0 AS relfrozenxid, 0 AS relminmxid,"
-                         "0 AS toid, "
-                         "0 AS tfrozenxid, 0 AS tminmxid,"
-                         "'p' AS relpersistence, 't' as relispopulated, "
-                         "'d' AS relreplident, relpages, "
-                         "NULL AS reloftype, "
-                         "NULL::oid AS owning_tab, "
-                         "NULL::int4 AS owning_col, "
-                         "NULL AS reltablespace, "
-                         "NULL AS reloptions, "
-                         "NULL AS toast_reloptions, "
-                         "NULL AS changed_acl "
-                         "FROM pg_class "
-                         "WHERE relkind IN ('%c', '%c', '%c') "
-                         "ORDER BY oid",
-                         username_subquery,
-                         RELKIND_RELATION, RELKIND_SEQUENCE, RELKIND_VIEW);
-   }
-   else
-   {
-       /*
-        * Before 7.1, view relkind was not set to 'v', so we must check if we
-        * have a view by looking for a rule in pg_rewrite.
-        */
-       appendPQExpBuffer(query,
-                         "SELECT "
-       "(SELECT oid FROM pg_class WHERE relname = 'pg_class') AS tableoid, "
-                         "oid, relname, relacl, NULL as rrelacl, "
-                         "NULL AS initrelacl, NULL AS initrrelacl, "
-                         "CASE WHEN relhasrules and relkind = 'r' "
-                     "  and EXISTS(SELECT rulename FROM pg_rewrite r WHERE "
-                     "             r.ev_class = c.oid AND r.ev_type = '1') "
-                         "THEN '%c'::\"char\" "
-                         "ELSE relkind END AS relkind,"
-                         "0::oid AS relnamespace, "
-                         "(%s relowner) AS rolname, "
-                         "relchecks, (reltriggers <> 0) AS relhastriggers, "
-                         "relhasindex, relhasrules, "
-                         "'t'::bool AS relhasoids, "
-                         "'f'::bool AS relrowsecurity, "
-                         "'f'::bool AS relforcerowsecurity, "
-                         "0 AS relfrozenxid, 0 AS relminmxid,"
-                         "0 AS toid, "
-                         "0 AS tfrozenxid, 0 AS tminmxid,"
-                         "'p' AS relpersistence, 't' as relispopulated, "
-                         "'d' AS relreplident, 0 AS relpages, "
-                         "NULL AS reloftype, "
-                         "NULL::oid AS owning_tab, "
-                         "NULL::int4 AS owning_col, "
-                         "NULL AS reltablespace, "
-                         "NULL AS reloptions, "
-                         "NULL AS toast_reloptions, "
-                         "NULL AS changed_acl "
-                         "FROM pg_class c "
-                         "WHERE relkind IN ('%c', '%c') "
-                         "ORDER BY oid",
-                         RELKIND_VIEW,
-                         username_subquery,
-                         RELKIND_RELATION, RELKIND_SEQUENCE);
-   }
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -5886,7 +5388,7 @@ getTables(Archive *fout, int *numTables)
    i_reloftype = PQfnumber(res, "reloftype");
    i_changed_acl = PQfnumber(res, "changed_acl");
 
-   if (dopt->lockWaitTimeout && fout->remoteVersion >= 70300)
+   if (dopt->lockWaitTimeout)
    {
        /*
         * Arrange to fail instead of waiting forever for a table lock.
@@ -5910,8 +5412,7 @@ getTables(Archive *fout, int *numTables)
        tblinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_relname));
        tblinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_relnamespace)),
-                         tblinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_relnamespace)));
        tblinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
        tblinfo[i].relacl = pg_strdup(PQgetvalue(res, i, i_relacl));
        tblinfo[i].rrelacl = pg_strdup(PQgetvalue(res, i, i_rrelacl));
@@ -6017,7 +5518,7 @@ getTables(Archive *fout, int *numTables)
                      tblinfo[i].dobj.name);
    }
 
-   if (dopt->lockWaitTimeout && fout->remoteVersion >= 70300)
+   if (dopt->lockWaitTimeout)
    {
        ExecuteSqlStatement(fout, "SET statement_timeout = 0");
    }
@@ -6290,7 +5791,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                              "ORDER BY indexname",
                              tbinfo->dobj.catId.oid);
        }
-       else if (fout->remoteVersion >= 80000)
+       else
        {
            appendPQExpBuffer(query,
                              "SELECT t.tableoid, t.oid, "
@@ -6319,87 +5820,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                              "ORDER BY indexname",
                              tbinfo->dobj.catId.oid);
        }
-       else if (fout->remoteVersion >= 70300)
-       {
-           appendPQExpBuffer(query,
-                             "SELECT t.tableoid, t.oid, "
-                             "t.relname AS indexname, "
-                    "pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
-                             "t.relnatts AS indnkeys, "
-                             "i.indkey, i.indisclustered, "
-                             "false AS indisreplident, t.relpages, "
-                             "c.contype, c.conname, "
-                             "c.condeferrable, c.condeferred, "
-                             "c.tableoid AS contableoid, "
-                             "c.oid AS conoid, "
-                             "null AS condef, "
-                             "NULL AS tablespace, "
-                             "null AS indreloptions "
-                             "FROM pg_catalog.pg_index i "
-                     "JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid) "
-                             "LEFT JOIN pg_catalog.pg_depend d "
-                             "ON (d.classid = t.tableoid "
-                             "AND d.objid = t.oid "
-                             "AND d.deptype = 'i') "
-                             "LEFT JOIN pg_catalog.pg_constraint c "
-                             "ON (d.refclassid = c.tableoid "
-                             "AND d.refobjid = c.oid) "
-                             "WHERE i.indrelid = '%u'::pg_catalog.oid "
-                             "ORDER BY indexname",
-                             tbinfo->dobj.catId.oid);
-       }
-       else if (fout->remoteVersion >= 70100)
-       {
-           appendPQExpBuffer(query,
-                             "SELECT t.tableoid, t.oid, "
-                             "t.relname AS indexname, "
-                             "pg_get_indexdef(i.indexrelid) AS indexdef, "
-                             "t.relnatts AS indnkeys, "
-                             "i.indkey, false AS indisclustered, "
-                             "false AS indisreplident, t.relpages, "
-                             "CASE WHEN i.indisprimary THEN 'p'::char "
-                             "ELSE '0'::char END AS contype, "
-                             "t.relname AS conname, "
-                             "false AS condeferrable, "
-                             "false AS condeferred, "
-                             "0::oid AS contableoid, "
-                             "t.oid AS conoid, "
-                             "null AS condef, "
-                             "NULL AS tablespace, "
-                             "null AS indreloptions "
-                             "FROM pg_index i, pg_class t "
-                             "WHERE t.oid = i.indexrelid "
-                             "AND i.indrelid = '%u'::oid "
-                             "ORDER BY indexname",
-                             tbinfo->dobj.catId.oid);
-       }
-       else
-       {
-           appendPQExpBuffer(query,
-                             "SELECT "
-                             "(SELECT oid FROM pg_class WHERE relname = 'pg_class') AS tableoid, "
-                             "t.oid, "
-                             "t.relname AS indexname, "
-                             "pg_get_indexdef(i.indexrelid) AS indexdef, "
-                             "t.relnatts AS indnkeys, "
-                             "i.indkey, false AS indisclustered, "
-                             "false AS indisreplident, t.relpages, "
-                             "CASE WHEN i.indisprimary THEN 'p'::char "
-                             "ELSE '0'::char END AS contype, "
-                             "t.relname AS conname, "
-                             "false AS condeferrable, "
-                             "false AS condeferred, "
-                             "0::oid AS contableoid, "
-                             "t.oid AS conoid, "
-                             "null AS condef, "
-                             "NULL AS tablespace, "
-                             "null AS indreloptions "
-                             "FROM pg_index i, pg_class t "
-                             "WHERE t.oid = i.indexrelid "
-                             "AND i.indrelid = '%u'::oid "
-                             "ORDER BY indexname",
-                             tbinfo->dobj.catId.oid);
-       }
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -6442,19 +5862,9 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
            indxinfo[j].indnkeys = atoi(PQgetvalue(res, j, i_indnkeys));
            indxinfo[j].tablespace = pg_strdup(PQgetvalue(res, j, i_tablespace));
            indxinfo[j].indreloptions = pg_strdup(PQgetvalue(res, j, i_indreloptions));
-
-           /*
-            * In pre-7.4 releases, indkeys may contain more entries than
-            * indnkeys says (since indnkeys will be 1 for a functional
-            * index).  We don't actually care about this case since we don't
-            * examine indkeys except for indexes associated with PRIMARY and
-            * UNIQUE constraints, which are never functional indexes. But we
-            * have to allocate enough space to keep parseOidArray from
-            * complaining.
-            */
-           indxinfo[j].indkeys = (Oid *) pg_malloc(INDEX_MAX_KEYS * sizeof(Oid));
+           indxinfo[j].indkeys = (Oid *) pg_malloc(indxinfo[j].indnkeys * sizeof(Oid));
            parseOidArray(PQgetvalue(res, j, i_indkey),
-                         indxinfo[j].indkeys, INDEX_MAX_KEYS);
+                         indxinfo[j].indkeys, indxinfo[j].indnkeys);
            indxinfo[j].indisclustered = (PQgetvalue(res, j, i_indisclustered)[0] == 't');
            indxinfo[j].indisreplident = (PQgetvalue(res, j, i_indisreplident)[0] == 't');
            indxinfo[j].relpages = atoi(PQgetvalue(res, j, i_relpages));
@@ -6465,9 +5875,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                /*
                 * If we found a constraint matching the index, create an
                 * entry for it.
-                *
-                * In a pre-7.3 database, we take this path iff the index was
-                * marked indisprimary.
                 */
                constrinfo[j].dobj.objType = DO_CONSTRAINT;
                constrinfo[j].dobj.catId.tableoid = atooid(PQgetvalue(res, j, i_contableoid));
@@ -6490,10 +5897,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                constrinfo[j].separate = true;
 
                indxinfo[j].indexconstraint = constrinfo[j].dobj.dumpId;
-
-               /* If pre-7.3 DB, better make sure table comes first */
-               addObjectDependency(&constrinfo[j].dobj,
-                                   tbinfo->dobj.dumpId);
            }
            else
            {
@@ -6532,10 +5935,6 @@ getConstraints(Archive *fout, TableInfo tblinfo[], int numTables)
                i_condef;
    int         ntups;
 
-   /* pg_constraint was created in 7.3, so nothing to do if older */
-   if (fout->remoteVersion < 70300)
-       return;
-
    query = createPQExpBuffer();
 
    for (i = 0; i < numTables; i++)
@@ -6621,10 +6020,6 @@ getDomainConstraints(Archive *fout, TypeInfo *tyinfo)
                i_consrc;
    int         ntups;
 
-   /* pg_constraint was created in 7.3, so nothing to do if older */
-   if (fout->remoteVersion < 70300)
-       return;
-
    /*
     * select appropriate schema to ensure names in constraint are properly
     * qualified
@@ -6642,17 +6037,9 @@ getDomainConstraints(Archive *fout, TypeInfo *tyinfo)
                          "ORDER BY conname",
                          tyinfo->dobj.catId.oid);
 
-   else if (fout->remoteVersion >= 70400)
-       appendPQExpBuffer(query, "SELECT tableoid, oid, conname, "
-                         "pg_catalog.pg_get_constraintdef(oid) AS consrc, "
-                         "true as convalidated "
-                         "FROM pg_catalog.pg_constraint "
-                         "WHERE contypid = '%u'::pg_catalog.oid "
-                         "ORDER BY conname",
-                         tyinfo->dobj.catId.oid);
    else
        appendPQExpBuffer(query, "SELECT tableoid, oid, conname, "
-                         "'CHECK (' || consrc || ')' AS consrc, "
+                         "pg_catalog.pg_get_constraintdef(oid) AS consrc, "
                          "true as convalidated "
                          "FROM pg_catalog.pg_constraint "
                          "WHERE contypid = '%u'::pg_catalog.oid "
@@ -6745,20 +6132,10 @@ getRules(Archive *fout, int *numRules)
                             "FROM pg_rewrite "
                             "ORDER BY oid");
    }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBufferStr(query, "SELECT "
-                            "tableoid, oid, rulename, "
-                            "ev_class AS ruletable, ev_type, is_instead, "
-                            "'O'::char AS ev_enabled "
-                            "FROM pg_rewrite "
-                            "ORDER BY oid");
-   }
    else
    {
        appendPQExpBufferStr(query, "SELECT "
-                            "(SELECT oid FROM pg_class WHERE relname = 'pg_rewrite') AS tableoid, "
-                            "oid, rulename, "
+                            "tableoid, oid, rulename, "
                             "ev_class AS ruletable, ev_type, is_instead, "
                             "'O'::char AS ev_enabled "
                             "FROM pg_rewrite "
@@ -6931,7 +6308,7 @@ getTriggers(Archive *fout, TableInfo tblinfo[], int numTables)
                              "AND tgconstraint = 0",
                              tbinfo->dobj.catId.oid);
        }
-       else if (fout->remoteVersion >= 70300)
+       else
        {
            /*
             * We ignore triggers that are tied to a foreign-key constraint,
@@ -6954,34 +6331,7 @@ getTriggers(Archive *fout, TableInfo tblinfo[], int numTables)
                              "   WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))",
                              tbinfo->dobj.catId.oid);
        }
-       else if (fout->remoteVersion >= 70100)
-       {
-           appendPQExpBuffer(query,
-                             "SELECT tgname, tgfoid::regproc AS tgfname, "
-                             "tgtype, tgnargs, tgargs, tgenabled, "
-                             "tgisconstraint, tgconstrname, tgdeferrable, "
-                             "tgconstrrelid, tginitdeferred, tableoid, oid, "
-                 "(SELECT relname FROM pg_class WHERE oid = tgconstrrelid) "
-                             "     AS tgconstrrelname "
-                             "FROM pg_trigger "
-                             "WHERE tgrelid = '%u'::oid",
-                             tbinfo->dobj.catId.oid);
-       }
-       else
-       {
-           appendPQExpBuffer(query,
-                             "SELECT tgname, tgfoid::regproc AS tgfname, "
-                             "tgtype, tgnargs, tgargs, tgenabled, "
-                             "tgisconstraint, tgconstrname, tgdeferrable, "
-                             "tgconstrrelid, tginitdeferred, "
-                             "(SELECT oid FROM pg_class WHERE relname = 'pg_trigger') AS tableoid, "
-                             "oid, "
-                 "(SELECT relname FROM pg_class WHERE oid = tgconstrrelid) "
-                             "     AS tgconstrrelname "
-                             "FROM pg_trigger "
-                             "WHERE tgrelid = '%u'::oid",
-                             tbinfo->dobj.catId.oid);
-       }
+
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
        ntups = PQntuples(res);
@@ -7278,7 +6628,7 @@ getProcLangs(Archive *fout, int *numProcLangs)
                          "ORDER BY oid",
                          username_subquery);
    }
-   else if (fout->remoteVersion >= 70400)
+   else
    {
        /* Languages are owned by the bootstrap superuser, sysid 1 */
        appendPQExpBuffer(query, "SELECT tableoid, oid, "
@@ -7292,45 +6642,6 @@ getProcLangs(Archive *fout, int *numProcLangs)
                          "ORDER BY oid",
                          username_subquery);
    }
-   else if (fout->remoteVersion >= 70300)
-   {
-       /* No clear notion of an owner at all before 7.4 ... */
-       appendPQExpBuffer(query, "SELECT tableoid, oid, "
-                         "lanname, lanpltrusted, lanplcallfoid, "
-                         "0 AS laninline, lanvalidator, lanacl, "
-                         "NULL AS rlanacl, "
-                         "NULL AS initlanacl, NULL AS initrlanacl, "
-                         "NULL AS lanowner "
-                         "FROM pg_language "
-                         "WHERE lanispl "
-                         "ORDER BY oid");
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query, "SELECT tableoid, oid, "
-                         "lanname, lanpltrusted, lanplcallfoid, "
-                       "0 AS laninline, 0 AS lanvalidator, NULL AS lanacl, "
-                         "NULL AS rlanacl, "
-                         "NULL AS initlanacl, NULL AS initrlanacl, "
-                         "NULL AS lanowner "
-                         "FROM pg_language "
-                         "WHERE lanispl "
-                         "ORDER BY oid");
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT "
-                         "(SELECT oid FROM pg_class WHERE relname = 'pg_language') AS tableoid, "
-                         "oid, "
-                         "lanname, lanpltrusted, lanplcallfoid, "
-                       "0 AS laninline, 0 AS lanvalidator, NULL AS lanacl, "
-                         "NULL AS rlanacl, "
-                         "NULL AS initlanacl, NULL AS initrlanacl, "
-                         "NULL AS lanowner "
-                         "FROM pg_language "
-                         "WHERE lanispl "
-                         "ORDER BY oid");
-   }
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -7379,20 +6690,6 @@ getProcLangs(Archive *fout, int *numProcLangs)
            PQgetisnull(res, i, i_initlanacl) &&
            PQgetisnull(res, i, i_initrlanacl))
            planginfo[i].dobj.dump &= ~DUMP_COMPONENT_ACL;
-
-       if (fout->remoteVersion < 70300)
-       {
-           /*
-            * We need to make a dependency to ensure the function will be
-            * dumped first.  (In 7.3 and later the regular dependency
-            * mechanism will handle this for us.)
-            */
-           FuncInfo   *funcInfo = findFuncByOid(planginfo[i].lanplcallfoid);
-
-           if (funcInfo)
-               addObjectDependency(&planginfo[i].dobj,
-                                   funcInfo->dobj.dumpId);
-       }
    }
 
    PQclear(res);
@@ -7434,25 +6731,13 @@ getCasts(Archive *fout, int *numCasts)
                             "castmethod "
                             "FROM pg_cast ORDER BY 3,4");
    }
-   else if (fout->remoteVersion >= 70300)
+   else
    {
        appendPQExpBufferStr(query, "SELECT tableoid, oid, "
                             "castsource, casttarget, castfunc, castcontext, "
                "CASE WHEN castfunc = 0 THEN 'b' ELSE 'f' END AS castmethod "
                             "FROM pg_cast ORDER BY 3,4");
    }
-   else
-   {
-       appendPQExpBufferStr(query, "SELECT 0 AS tableoid, p.oid, "
-                            "t1.oid AS castsource, t2.oid AS casttarget, "
-                            "p.oid AS castfunc, 'e' AS castcontext, "
-                            "'f' AS castmethod "
-                            "FROM pg_type t1, pg_type t2, pg_proc p "
-                            "WHERE p.pronargs = 1 AND "
-                            "p.proargtypes[0] = t1.oid AND "
-                         "p.prorettype = t2.oid AND p.proname = t2.typname "
-                            "ORDER BY 3,4");
-   }
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -7499,22 +6784,6 @@ getCasts(Archive *fout, int *numCasts)
                              sTypeInfo->dobj.name, tTypeInfo->dobj.name);
        castinfo[i].dobj.name = namebuf.data;
 
-       if (fout->remoteVersion < 70300 &&
-           OidIsValid(castinfo[i].castfunc))
-       {
-           /*
-            * We need to make a dependency to ensure the function will be
-            * dumped first.  (In 7.3 and later the regular dependency
-            * mechanism handles this for us.)
-            */
-           FuncInfo   *funcInfo;
-
-           funcInfo = findFuncByOid(castinfo[i].castfunc);
-           if (funcInfo)
-               addObjectDependency(&castinfo[i].dobj,
-                                   funcInfo->dobj.dumpId);
-       }
-
        /* Decide whether we want to dump it */
        selectDumpableCast(&(castinfo[i]), fout);
 
@@ -7701,10 +6970,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
 
        /*
         * we must read the attribute names in attribute number order! because
-        * we will use the attnum to index into the attnames array later.  We
-        * actually ask to order by "attrelid, attnum" because (at least up to
-        * 7.3) the planner is not smart enough to realize it needn't re-sort
-        * the output of an indexscan on pg_attribute_relid_attnum_index.
+        * we will use the attnum to index into the attnames array later.
         */
        if (g_verbose)
            write_msg(NULL, "finding the columns and types of table \"%s.%s\"\n",
@@ -7736,7 +7002,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                              "ON a.atttypid = t.oid "
                              "WHERE a.attrelid = '%u'::pg_catalog.oid "
                              "AND a.attnum > 0::pg_catalog.int2 "
-                             "ORDER BY a.attrelid, a.attnum",
+                             "ORDER BY a.attnum",
                              tbinfo->dobj.catId.oid);
        }
        else if (fout->remoteVersion >= 90100)
@@ -7760,7 +7026,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                              "ON a.atttypid = t.oid "
                              "WHERE a.attrelid = '%u'::pg_catalog.oid "
                              "AND a.attnum > 0::pg_catalog.int2 "
-                             "ORDER BY a.attrelid, a.attnum",
+                             "ORDER BY a.attnum",
                              tbinfo->dobj.catId.oid);
        }
        else if (fout->remoteVersion >= 90000)
@@ -7778,10 +7044,10 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                              "ON a.atttypid = t.oid "
                              "WHERE a.attrelid = '%u'::pg_catalog.oid "
                              "AND a.attnum > 0::pg_catalog.int2 "
-                             "ORDER BY a.attrelid, a.attnum",
+                             "ORDER BY a.attnum",
                              tbinfo->dobj.catId.oid);
        }
-       else if (fout->remoteVersion >= 70300)
+       else
        {
            /* need left join here to not fail on dropped columns ... */
            appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
@@ -7795,50 +7061,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                              "ON a.atttypid = t.oid "
                              "WHERE a.attrelid = '%u'::pg_catalog.oid "
                              "AND a.attnum > 0::pg_catalog.int2 "
-                             "ORDER BY a.attrelid, a.attnum",
-                             tbinfo->dobj.catId.oid);
-       }
-       else if (fout->remoteVersion >= 70100)
-       {
-           /*
-            * attstattarget doesn't exist in 7.1.  It does exist in 7.2, but
-            * we don't dump it because we can't tell whether it's been
-            * explicitly set or was just a default.
-            *
-            * attislocal doesn't exist before 7.3, either; in older databases
-            * we assume it's TRUE, else we'd fail to dump non-inherited atts.
-            */
-           appendPQExpBuffer(q, "SELECT a.attnum, a.attname, a.atttypmod, "
-                             "-1 AS attstattarget, a.attstorage, "
-                             "t.typstorage, a.attnotnull, a.atthasdef, "
-                             "false AS attisdropped, a.attlen, "
-                             "a.attalign, true AS attislocal, "
-                             "format_type(t.oid,a.atttypmod) AS atttypname, "
-                             "'' AS attoptions, 0 AS attcollation, "
-                             "NULL AS attfdwoptions "
-                             "FROM pg_attribute a LEFT JOIN pg_type t "
-                             "ON a.atttypid = t.oid "
-                             "WHERE a.attrelid = '%u'::oid "
-                             "AND a.attnum > 0::int2 "
-                             "ORDER BY a.attrelid, a.attnum",
-                             tbinfo->dobj.catId.oid);
-       }
-       else
-       {
-           /* format_type not available before 7.1 */
-           appendPQExpBuffer(q, "SELECT attnum, attname, atttypmod, "
-                             "-1 AS attstattarget, "
-                             "attstorage, attstorage AS typstorage, "
-                             "attnotnull, atthasdef, false AS attisdropped, "
-                             "attlen, attalign, "
-                             "true AS attislocal, "
-                             "(SELECT typname FROM pg_type WHERE oid = atttypid) AS atttypname, "
-                             "'' AS attoptions, 0 AS attcollation, "
-                             "NULL AS attfdwoptions "
-                             "FROM pg_attribute a "
-                             "WHERE attrelid = '%u'::oid "
-                             "AND attnum > 0::int2 "
-                             "ORDER BY attrelid, attnum",
+                             "ORDER BY a.attnum",
                              tbinfo->dobj.catId.oid);
        }
 
@@ -7924,42 +7147,12 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                          tbinfo->dobj.namespace->dobj.name,
                          tbinfo->dobj.name);
 
-           resetPQExpBuffer(q);
-           if (fout->remoteVersion >= 70300)
-           {
-               appendPQExpBuffer(q, "SELECT tableoid, oid, adnum, "
+           printfPQExpBuffer(q, "SELECT tableoid, oid, adnum, "
                           "pg_catalog.pg_get_expr(adbin, adrelid) AS adsrc "
-                                 "FROM pg_catalog.pg_attrdef "
-                                 "WHERE adrelid = '%u'::pg_catalog.oid",
-                                 tbinfo->dobj.catId.oid);
-           }
-           else if (fout->remoteVersion >= 70200)
-           {
-               /* 7.2 did not have OIDs in pg_attrdef */
-               appendPQExpBuffer(q, "SELECT tableoid, 0 AS oid, adnum, "
-                                 "pg_get_expr(adbin, adrelid) AS adsrc "
-                                 "FROM pg_attrdef "
-                                 "WHERE adrelid = '%u'::oid",
-                                 tbinfo->dobj.catId.oid);
-           }
-           else if (fout->remoteVersion >= 70100)
-           {
-               /* no pg_get_expr, so must rely on adsrc */
-               appendPQExpBuffer(q, "SELECT tableoid, oid, adnum, adsrc "
-                                 "FROM pg_attrdef "
-                                 "WHERE adrelid = '%u'::oid",
-                                 tbinfo->dobj.catId.oid);
-           }
-           else
-           {
-               /* no pg_get_expr, no tableoid either */
-               appendPQExpBuffer(q, "SELECT "
-                                 "(SELECT oid FROM pg_class WHERE relname = 'pg_attrdef') AS tableoid, "
-                                 "oid, adnum, adsrc "
-                                 "FROM pg_attrdef "
-                                 "WHERE adrelid = '%u'::oid",
-                                 tbinfo->dobj.catId.oid);
-           }
+                             "FROM pg_catalog.pg_attrdef "
+                             "WHERE adrelid = '%u'::pg_catalog.oid",
+                             tbinfo->dobj.catId.oid);
+
            res = ExecuteSqlQuery(fout, q->data, PGRES_TUPLES_OK);
 
            numDefaults = PQntuples(res);
@@ -8005,17 +7198,11 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                if (tbinfo->relkind == RELKIND_VIEW)
                {
                    attrdefs[j].separate = true;
-                   /* needed in case pre-7.3 DB: */
-                   addObjectDependency(&attrdefs[j].dobj,
-                                       tbinfo->dobj.dumpId);
                }
                else if (!shouldPrintColumn(dopt, tbinfo, adnum - 1))
                {
                    /* column will be suppressed, print default separately */
                    attrdefs[j].separate = true;
-                   /* needed in case pre-7.3 DB: */
-                   addObjectDependency(&attrdefs[j].dobj,
-                                       tbinfo->dobj.dumpId);
                }
                else
                {
@@ -8077,7 +7264,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                                  "ORDER BY conname",
                                  tbinfo->dobj.catId.oid);
            }
-           else if (fout->remoteVersion >= 70400)
+           else
            {
                appendPQExpBuffer(q, "SELECT tableoid, oid, conname, "
                           "pg_catalog.pg_get_constraintdef(oid) AS consrc, "
@@ -8088,54 +7275,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                                  "ORDER BY conname",
                                  tbinfo->dobj.catId.oid);
            }
-           else if (fout->remoteVersion >= 70300)
-           {
-               /* no pg_get_constraintdef, must use consrc */
-               appendPQExpBuffer(q, "SELECT tableoid, oid, conname, "
-                                 "'CHECK (' || consrc || ')' AS consrc, "
-                                 "true AS conislocal, true AS convalidated "
-                                 "FROM pg_catalog.pg_constraint "
-                                 "WHERE conrelid = '%u'::pg_catalog.oid "
-                                 "   AND contype = 'c' "
-                                 "ORDER BY conname",
-                                 tbinfo->dobj.catId.oid);
-           }
-           else if (fout->remoteVersion >= 70200)
-           {
-               /* 7.2 did not have OIDs in pg_relcheck */
-               appendPQExpBuffer(q, "SELECT tableoid, 0 AS oid, "
-                                 "rcname AS conname, "
-                                 "'CHECK (' || rcsrc || ')' AS consrc, "
-                                 "true AS conislocal, true AS convalidated "
-                                 "FROM pg_relcheck "
-                                 "WHERE rcrelid = '%u'::oid "
-                                 "ORDER BY rcname",
-                                 tbinfo->dobj.catId.oid);
-           }
-           else if (fout->remoteVersion >= 70100)
-           {
-               appendPQExpBuffer(q, "SELECT tableoid, oid, "
-                                 "rcname AS conname, "
-                                 "'CHECK (' || rcsrc || ')' AS consrc, "
-                                 "true AS conislocal, true AS convalidated "
-                                 "FROM pg_relcheck "
-                                 "WHERE rcrelid = '%u'::oid "
-                                 "ORDER BY rcname",
-                                 tbinfo->dobj.catId.oid);
-           }
-           else
-           {
-               /* no tableoid in 7.0 */
-               appendPQExpBuffer(q, "SELECT "
-                                 "(SELECT oid FROM pg_class WHERE relname = 'pg_relcheck') AS tableoid, "
-                                 "oid, rcname AS conname, "
-                                 "'CHECK (' || rcsrc || ')' AS consrc, "
-                                 "true AS conislocal, true AS convalidated "
-                                 "FROM pg_relcheck "
-                                 "WHERE rcrelid = '%u'::oid "
-                                 "ORDER BY rcname",
-                                 tbinfo->dobj.catId.oid);
-           }
+
            res = ExecuteSqlQuery(fout, q->data, PGRES_TUPLES_OK);
 
            numConstrs = PQntuples(res);
@@ -8303,8 +7443,7 @@ getTSParsers(Archive *fout, int *numTSParsers)
        prsinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_prsname));
        prsinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_prsnamespace)),
-                         prsinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_prsnamespace)));
        prsinfo[i].prsstart = atooid(PQgetvalue(res, i, i_prsstart));
        prsinfo[i].prstoken = atooid(PQgetvalue(res, i, i_prstoken));
        prsinfo[i].prsend = atooid(PQgetvalue(res, i, i_prsend));
@@ -8390,8 +7529,7 @@ getTSDictionaries(Archive *fout, int *numTSDicts)
        dictinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_dictname));
        dictinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_dictnamespace)),
-                         dictinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_dictnamespace)));
        dictinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
        dictinfo[i].dicttemplate = atooid(PQgetvalue(res, i, i_dicttemplate));
        if (PQgetisnull(res, i, i_dictinitoption))
@@ -8474,8 +7612,7 @@ getTSTemplates(Archive *fout, int *numTSTemplates)
        tmplinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_tmplname));
        tmplinfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_tmplnamespace)),
-                         tmplinfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_tmplnamespace)));
        tmplinfo[i].tmplinit = atooid(PQgetvalue(res, i, i_tmplinit));
        tmplinfo[i].tmpllexize = atooid(PQgetvalue(res, i, i_tmpllexize));
 
@@ -8555,8 +7692,7 @@ getTSConfigurations(Archive *fout, int *numTSConfigs)
        cfginfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_cfgname));
        cfginfo[i].dobj.namespace =
            findNamespace(fout,
-                         atooid(PQgetvalue(res, i, i_cfgnamespace)),
-                         cfginfo[i].dobj.catId.oid);
+                         atooid(PQgetvalue(res, i, i_cfgnamespace)));
        cfginfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
        cfginfo[i].cfgparser = atooid(PQgetvalue(res, i, i_cfgparser));
 
@@ -8964,8 +8100,7 @@ getDefaultACLs(Archive *fout, int *numDefaultACLs)
        daclinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_defaclobjtype));
 
        if (nspid != InvalidOid)
-           daclinfo[i].dobj.namespace = findNamespace(fout, nspid,
-                                                daclinfo[i].dobj.catId.oid);
+           daclinfo[i].dobj.namespace = findNamespace(fout, nspid);
        else
            daclinfo[i].dobj.namespace = NULL;
 
@@ -9173,14 +8308,6 @@ findComments(Archive *fout, Oid classoid, Oid objoid,
    if (ncomments < 0)
        ncomments = collectComments(fout, &comments);
 
-   /*
-    * Pre-7.2, pg_description does not contain classoid, so collectComments
-    * just stores a zero.  If there's a collision on object OID, well, you
-    * get duplicate comments.
-    */
-   if (fout->remoteVersion < 70200)
-       classoid = 0;
-
    /*
     * Do binary search to find some item matching the object.
     */
@@ -9268,25 +8395,9 @@ collectComments(Archive *fout, CommentItem **items)
 
    query = createPQExpBuffer();
 
-   if (fout->remoteVersion >= 70300)
-   {
-       appendPQExpBufferStr(query, "SELECT description, classoid, objoid, objsubid "
-                            "FROM pg_catalog.pg_description "
-                            "ORDER BY classoid, objoid, objsubid");
-   }
-   else if (fout->remoteVersion >= 70200)
-   {
-       appendPQExpBufferStr(query, "SELECT description, classoid, objoid, objsubid "
-                            "FROM pg_description "
-                            "ORDER BY classoid, objoid, objsubid");
-   }
-   else
-   {
-       /* Note: this will fail to find attribute comments in pre-7.2... */
-       appendPQExpBufferStr(query, "SELECT description, 0 AS classoid, objoid, 0 AS objsubid "
-                            "FROM pg_description "
-                            "ORDER BY objoid");
-   }
+   appendPQExpBufferStr(query, "SELECT description, classoid, objoid, objsubid "
+                        "FROM pg_catalog.pg_description "
+                        "ORDER BY classoid, objoid, objsubid");
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -9468,10 +8579,6 @@ dumpNamespace(Archive *fout, NamespaceInfo *nspinfo)
    if (!nspinfo->dobj.dump || dopt->dataOnly)
        return;
 
-   /* don't dump dummy namespace from pre-7.3 source */
-   if (strlen(nspinfo->dobj.name) == 0)
-       return;
-
    q = createPQExpBuffer();
    delq = createPQExpBuffer();
    labelq = createPQExpBuffer();
@@ -10089,71 +9196,35 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
                          "WHERE oid = '%u'::pg_catalog.oid",
                          tyinfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 80400)
-   {
-       appendPQExpBuffer(query, "SELECT typlen, "
-                         "typinput, typoutput, typreceive, typsend, "
-                         "typmodin, typmodout, typanalyze, "
-                         "typreceive::pg_catalog.oid AS typreceiveoid, "
-                         "typsend::pg_catalog.oid AS typsendoid, "
-                         "typmodin::pg_catalog.oid AS typmodinoid, "
-                         "typmodout::pg_catalog.oid AS typmodoutoid, "
-                         "typanalyze::pg_catalog.oid AS typanalyzeoid, "
-                         "typcategory, typispreferred, "
-                         "typdelim, typbyval, typalign, typstorage, "
-                         "false AS typcollatable, "
-                         "pg_catalog.pg_get_expr(typdefaultbin, 0) AS typdefaultbin, typdefault "
-                         "FROM pg_catalog.pg_type "
-                         "WHERE oid = '%u'::pg_catalog.oid",
-                         tyinfo->dobj.catId.oid);
-   }
-   else if (fout->remoteVersion >= 80300)
-   {
-       /* Before 8.4, pg_get_expr does not allow 0 for its second arg */
-       appendPQExpBuffer(query, "SELECT typlen, "
-                         "typinput, typoutput, typreceive, typsend, "
-                         "typmodin, typmodout, typanalyze, "
-                         "typreceive::pg_catalog.oid AS typreceiveoid, "
-                         "typsend::pg_catalog.oid AS typsendoid, "
-                         "typmodin::pg_catalog.oid AS typmodinoid, "
-                         "typmodout::pg_catalog.oid AS typmodoutoid, "
-                         "typanalyze::pg_catalog.oid AS typanalyzeoid, "
-                         "'U' AS typcategory, false AS typispreferred, "
-                         "typdelim, typbyval, typalign, typstorage, "
-                         "false AS typcollatable, "
-                         "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault "
-                         "FROM pg_catalog.pg_type "
-                         "WHERE oid = '%u'::pg_catalog.oid",
-                         tyinfo->dobj.catId.oid);
-   }
-   else if (fout->remoteVersion >= 80000)
+   else if (fout->remoteVersion >= 80400)
    {
        appendPQExpBuffer(query, "SELECT typlen, "
                          "typinput, typoutput, typreceive, typsend, "
-                         "'-' AS typmodin, '-' AS typmodout, "
-                         "typanalyze, "
+                         "typmodin, typmodout, typanalyze, "
                          "typreceive::pg_catalog.oid AS typreceiveoid, "
                          "typsend::pg_catalog.oid AS typsendoid, "
-                         "0 AS typmodinoid, 0 AS typmodoutoid, "
+                         "typmodin::pg_catalog.oid AS typmodinoid, "
+                         "typmodout::pg_catalog.oid AS typmodoutoid, "
                          "typanalyze::pg_catalog.oid AS typanalyzeoid, "
-                         "'U' AS typcategory, false AS typispreferred, "
+                         "typcategory, typispreferred, "
                          "typdelim, typbyval, typalign, typstorage, "
                          "false AS typcollatable, "
-                         "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault "
+                         "pg_catalog.pg_get_expr(typdefaultbin, 0) AS typdefaultbin, typdefault "
                          "FROM pg_catalog.pg_type "
                          "WHERE oid = '%u'::pg_catalog.oid",
                          tyinfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70400)
+   else if (fout->remoteVersion >= 80300)
    {
+       /* Before 8.4, pg_get_expr does not allow 0 for its second arg */
        appendPQExpBuffer(query, "SELECT typlen, "
                          "typinput, typoutput, typreceive, typsend, "
-                         "'-' AS typmodin, '-' AS typmodout, "
-                         "'-' AS typanalyze, "
+                         "typmodin, typmodout, typanalyze, "
                          "typreceive::pg_catalog.oid AS typreceiveoid, "
                          "typsend::pg_catalog.oid AS typsendoid, "
-                         "0 AS typmodinoid, 0 AS typmodoutoid, "
-                         "0 AS typanalyzeoid, "
+                         "typmodin::pg_catalog.oid AS typmodinoid, "
+                         "typmodout::pg_catalog.oid AS typmodoutoid, "
+                         "typanalyze::pg_catalog.oid AS typanalyzeoid, "
                          "'U' AS typcategory, false AS typispreferred, "
                          "typdelim, typbyval, typalign, typstorage, "
                          "false AS typcollatable, "
@@ -10162,16 +9233,16 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
                          "WHERE oid = '%u'::pg_catalog.oid",
                          tyinfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70300)
+   else
    {
        appendPQExpBuffer(query, "SELECT typlen, "
-                         "typinput, typoutput, "
-                         "'-' AS typreceive, '-' AS typsend, "
+                         "typinput, typoutput, typreceive, typsend, "
                          "'-' AS typmodin, '-' AS typmodout, "
-                         "'-' AS typanalyze, "
-                         "0 AS typreceiveoid, 0 AS typsendoid, "
+                         "typanalyze, "
+                         "typreceive::pg_catalog.oid AS typreceiveoid, "
+                         "typsend::pg_catalog.oid AS typsendoid, "
                          "0 AS typmodinoid, 0 AS typmodoutoid, "
-                         "0 AS typanalyzeoid, "
+                         "typanalyze::pg_catalog.oid AS typanalyzeoid, "
                          "'U' AS typcategory, false AS typispreferred, "
                          "typdelim, typbyval, typalign, typstorage, "
                          "false AS typcollatable, "
@@ -10180,69 +9251,6 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
                          "WHERE oid = '%u'::pg_catalog.oid",
                          tyinfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70200)
-   {
-       /*
-        * Note: although pre-7.3 catalogs contain typreceive and typsend,
-        * ignore them because they are not right.
-        */
-       appendPQExpBuffer(query, "SELECT typlen, "
-                         "typinput, typoutput, "
-                         "'-' AS typreceive, '-' AS typsend, "
-                         "'-' AS typmodin, '-' AS typmodout, "
-                         "'-' AS typanalyze, "
-                         "0 AS typreceiveoid, 0 AS typsendoid, "
-                         "0 AS typmodinoid, 0 AS typmodoutoid, "
-                         "0 AS typanalyzeoid, "
-                         "'U' AS typcategory, false AS typispreferred, "
-                         "typdelim, typbyval, typalign, typstorage, "
-                         "false AS typcollatable, "
-                         "NULL AS typdefaultbin, typdefault "
-                         "FROM pg_type "
-                         "WHERE oid = '%u'::oid",
-                         tyinfo->dobj.catId.oid);
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       /*
-        * Ignore pre-7.2 typdefault; the field exists but has an unusable
-        * representation.
-        */
-       appendPQExpBuffer(query, "SELECT typlen, "
-                         "typinput, typoutput, "
-                         "'-' AS typreceive, '-' AS typsend, "
-                         "'-' AS typmodin, '-' AS typmodout, "
-                         "'-' AS typanalyze, "
-                         "0 AS typreceiveoid, 0 AS typsendoid, "
-                         "0 AS typmodinoid, 0 AS typmodoutoid, "
-                         "0 AS typanalyzeoid, "
-                         "'U' AS typcategory, false AS typispreferred, "
-                         "typdelim, typbyval, typalign, typstorage, "
-                         "false AS typcollatable, "
-                         "NULL AS typdefaultbin, NULL AS typdefault "
-                         "FROM pg_type "
-                         "WHERE oid = '%u'::oid",
-                         tyinfo->dobj.catId.oid);
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT typlen, "
-                         "typinput, typoutput, "
-                         "'-' AS typreceive, '-' AS typsend, "
-                         "'-' AS typmodin, '-' AS typmodout, "
-                         "'-' AS typanalyze, "
-                         "0 AS typreceiveoid, 0 AS typsendoid, "
-                         "0 AS typmodinoid, 0 AS typmodoutoid, "
-                         "0 AS typanalyzeoid, "
-                         "'U' AS typcategory, false AS typispreferred, "
-                         "typdelim, typbyval, typalign, "
-                         "'p'::char AS typstorage, "
-                         "false AS typcollatable, "
-                         "NULL AS typdefaultbin, NULL AS typdefault "
-                         "FROM pg_type "
-                         "WHERE oid = '%u'::oid",
-                         tyinfo->dobj.catId.oid);
-   }
 
    res = ExecuteSqlQueryForSingleRow(fout, query->data);
 
@@ -10300,30 +9308,19 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
                      qtypname,
                      (strcmp(typlen, "-1") == 0) ? "variable" : typlen);
 
-   if (fout->remoteVersion >= 70300)
-   {
-       /* regproc result is correctly quoted as of 7.3 */
-       appendPQExpBuffer(q, ",\n    INPUT = %s", typinput);
-       appendPQExpBuffer(q, ",\n    OUTPUT = %s", typoutput);
-       if (OidIsValid(typreceiveoid))
-           appendPQExpBuffer(q, ",\n    RECEIVE = %s", typreceive);
-       if (OidIsValid(typsendoid))
-           appendPQExpBuffer(q, ",\n    SEND = %s", typsend);
-       if (OidIsValid(typmodinoid))
-           appendPQExpBuffer(q, ",\n    TYPMOD_IN = %s", typmodin);
-       if (OidIsValid(typmodoutoid))
-           appendPQExpBuffer(q, ",\n    TYPMOD_OUT = %s", typmodout);
-       if (OidIsValid(typanalyzeoid))
-           appendPQExpBuffer(q, ",\n    ANALYZE = %s", typanalyze);
-   }
-   else
-   {
-       /* regproc delivers an unquoted name before 7.3 */
-       /* cannot combine these because fmtId uses static result area */
-       appendPQExpBuffer(q, ",\n    INPUT = %s", fmtId(typinput));
-       appendPQExpBuffer(q, ",\n    OUTPUT = %s", fmtId(typoutput));
-       /* receive/send/typmodin/typmodout/analyze need not be printed */
-   }
+   /* regproc result is sufficiently quoted already */
+   appendPQExpBuffer(q, ",\n    INPUT = %s", typinput);
+   appendPQExpBuffer(q, ",\n    OUTPUT = %s", typoutput);
+   if (OidIsValid(typreceiveoid))
+       appendPQExpBuffer(q, ",\n    RECEIVE = %s", typreceive);
+   if (OidIsValid(typsendoid))
+       appendPQExpBuffer(q, ",\n    SEND = %s", typsend);
+   if (OidIsValid(typmodinoid))
+       appendPQExpBuffer(q, ",\n    TYPMOD_IN = %s", typmodin);
+   if (OidIsValid(typmodoutoid))
+       appendPQExpBuffer(q, ",\n    TYPMOD_OUT = %s", typmodout);
+   if (OidIsValid(typanalyzeoid))
+       appendPQExpBuffer(q, ",\n    ANALYZE = %s", typanalyze);
 
    if (strcmp(typcollatable, "t") == 0)
        appendPQExpBufferStr(q, ",\n    COLLATABLE = true");
@@ -10468,7 +9465,6 @@ dumpDomain(Archive *fout, TypeInfo *tyinfo)
    }
    else
    {
-       /* We assume here that remoteVersion must be at least 70300 */
        appendPQExpBuffer(query, "SELECT typnotnull, "
                "pg_catalog.format_type(typbasetype, typtypmod) AS typdefn, "
                          "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, "
@@ -10669,9 +9665,8 @@ dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
    else
    {
        /*
-        * We assume here that remoteVersion must be at least 70300.  Since
-        * ALTER TYPE could not drop columns until 9.1, attisdropped should
-        * always be false.
+        * Since ALTER TYPE could not drop columns until 9.1, attisdropped
+        * should always be false.
         */
        appendPQExpBuffer(query, "SELECT a.attname, "
            "pg_catalog.format_type(a.atttypid, a.atttypmod) AS atttypdefn, "
@@ -10858,7 +9853,6 @@ dumpCompositeTypeColComments(Archive *fout, TypeInfo *tyinfo)
 
    query = createPQExpBuffer();
 
-   /* We assume here that remoteVersion must be at least 70300 */
    appendPQExpBuffer(query,
                      "SELECT c.tableoid, a.attname, a.attnum "
                      "FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a "
@@ -11442,7 +10436,7 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
                          "WHERE oid = '%u'::pg_catalog.oid",
                          finfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 80000)
+   else
    {
        appendPQExpBuffer(query,
                          "SELECT proretset, prosrc, probin, "
@@ -11458,58 +10452,6 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
                          "WHERE oid = '%u'::pg_catalog.oid",
                          finfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70300)
-   {
-       appendPQExpBuffer(query,
-                         "SELECT proretset, prosrc, probin, "
-                         "null AS proallargtypes, "
-                         "null AS proargmodes, "
-                         "null AS proargnames, "
-                         "false AS proiswindow, "
-                         "provolatile, proisstrict, prosecdef, "
-                         "false AS proleakproof, "
-                         "null AS proconfig, 0 AS procost, 0 AS prorows, "
-                         "(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) AS lanname "
-                         "FROM pg_catalog.pg_proc "
-                         "WHERE oid = '%u'::pg_catalog.oid",
-                         finfo->dobj.catId.oid);
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query,
-                         "SELECT proretset, prosrc, probin, "
-                         "null AS proallargtypes, "
-                         "null AS proargmodes, "
-                         "null AS proargnames, "
-                         "false AS proiswindow, "
-            "case when proiscachable then 'i' else 'v' end AS provolatile, "
-                         "proisstrict, "
-                         "false AS prosecdef, "
-                         "false AS proleakproof, "
-                         "null AS proconfig, 0 AS procost, 0 AS prorows, "
-         "(SELECT lanname FROM pg_language WHERE oid = prolang) AS lanname "
-                         "FROM pg_proc "
-                         "WHERE oid = '%u'::oid",
-                         finfo->dobj.catId.oid);
-   }
-   else
-   {
-       appendPQExpBuffer(query,
-                         "SELECT proretset, prosrc, probin, "
-                         "null AS proallargtypes, "
-                         "null AS proargmodes, "
-                         "null AS proargnames, "
-                         "false AS proiswindow, "
-            "CASE WHEN proiscachable THEN 'i' ELSE 'v' END AS provolatile, "
-                         "false AS proisstrict, "
-                         "false AS prosecdef, "
-                         "false AS proleakproof, "
-                         "NULL AS proconfig, 0 AS procost, 0 AS prorows, "
-         "(SELECT lanname FROM pg_language WHERE oid = prolang) AS lanname "
-                         "FROM pg_proc "
-                         "WHERE oid = '%u'::oid",
-                         finfo->dobj.catId.oid);
-   }
 
    res = ExecuteSqlQueryForSingleRow(fout, query->data);
 
@@ -12082,7 +11024,6 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
    PQExpBuffer labelq;
    PQExpBuffer oprid;
    PQExpBuffer details;
-   const char *name;
    PGresult   *res;
    int         i_oprkind;
    int         i_oprcode;
@@ -12143,7 +11084,7 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
                          "WHERE oid = '%u'::pg_catalog.oid",
                          oprinfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70300)
+   else
    {
        appendPQExpBuffer(query, "SELECT oprkind, "
                          "oprcode::pg_catalog.regprocedure, "
@@ -12159,34 +11100,6 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
                          "WHERE oid = '%u'::pg_catalog.oid",
                          oprinfo->dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query, "SELECT oprkind, oprcode, "
-                         "CASE WHEN oprleft = 0 THEN '-' "
-                         "ELSE format_type(oprleft, NULL) END AS oprleft, "
-                         "CASE WHEN oprright = 0 THEN '-' "
-                         "ELSE format_type(oprright, NULL) END AS oprright, "
-                         "oprcom, oprnegate, oprrest, oprjoin, "
-                         "(oprlsortop != 0) AS oprcanmerge, "
-                         "oprcanhash "
-                         "FROM pg_operator "
-                         "WHERE oid = '%u'::oid",
-                         oprinfo->dobj.catId.oid);
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT oprkind, oprcode, "
-                         "CASE WHEN oprleft = 0 THEN '-'::name "
-                         "ELSE (SELECT typname FROM pg_type WHERE oid = oprleft) END AS oprleft, "
-                         "CASE WHEN oprright = 0 THEN '-'::name "
-                         "ELSE (SELECT typname FROM pg_type WHERE oid = oprright) END AS oprright, "
-                         "oprcom, oprnegate, oprrest, oprjoin, "
-                         "(oprlsortop != 0) AS oprcanmerge, "
-                         "oprcanhash "
-                         "FROM pg_operator "
-                         "WHERE oid = '%u'::oid",
-                         oprinfo->dobj.catId.oid);
-   }
 
    res = ExecuteSqlQueryForSingleRow(fout, query->data);
 
@@ -12229,12 +11142,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
    if (strcmp(oprkind, "r") == 0 ||
        strcmp(oprkind, "b") == 0)
    {
-       if (fout->remoteVersion >= 70100)
-           name = oprleft;
-       else
-           name = fmtId(oprleft);
-       appendPQExpBuffer(details, ",\n    LEFTARG = %s", name);
-       appendPQExpBufferStr(oprid, name);
+       appendPQExpBuffer(details, ",\n    LEFTARG = %s", oprleft);
+       appendPQExpBufferStr(oprid, oprleft);
    }
    else
        appendPQExpBufferStr(oprid, "NONE");
@@ -12242,12 +11151,8 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
    if (strcmp(oprkind, "l") == 0 ||
        strcmp(oprkind, "b") == 0)
    {
-       if (fout->remoteVersion >= 70100)
-           name = oprright;
-       else
-           name = fmtId(oprright);
-       appendPQExpBuffer(details, ",\n    RIGHTARG = %s", name);
-       appendPQExpBuffer(oprid, ", %s)", name);
+       appendPQExpBuffer(details, ",\n    RIGHTARG = %s", oprright);
+       appendPQExpBuffer(oprid, ", %s)", oprright);
    }
    else
        appendPQExpBufferStr(oprid, ", NONE)");
@@ -12334,40 +11239,34 @@ dumpOpr(Archive *fout, OprInfo *oprinfo)
  * Returns allocated string of what to print, or NULL if function references
  * is InvalidOid. Returned string is expected to be free'd by the caller.
  *
- * In 7.3 the input is a REGPROCEDURE display; we have to strip the
- * argument-types part.  In prior versions, the input is a REGPROC display.
+ * The input is a REGPROCEDURE display; we have to strip the argument-types
+ * part.
  */
 static char *
 convertRegProcReference(Archive *fout, const char *proc)
 {
+   char       *name;
+   char       *paren;
+   bool        inquote;
+
    /* In all cases "-" means a null reference */
    if (strcmp(proc, "-") == 0)
        return NULL;
 
-   if (fout->remoteVersion >= 70300)
+   name = pg_strdup(proc);
+   /* find non-double-quoted left paren */
+   inquote = false;
+   for (paren = name; *paren; paren++)
    {
-       char       *name;
-       char       *paren;
-       bool        inquote;
-
-       name = pg_strdup(proc);
-       /* find non-double-quoted left paren */
-       inquote = false;
-       for (paren = name; *paren; paren++)
+       if (*paren == '(' && !inquote)
        {
-           if (*paren == '(' && !inquote)
-           {
-               *paren = '\0';
-               break;
-           }
-           if (*paren == '"')
-               inquote = !inquote;
+           *paren = '\0';
+           break;
        }
-       return name;
+       if (*paren == '"')
+           inquote = !inquote;
    }
-
-   /* REGPROC before 7.3 does not quote its result */
-   return pg_strdup(fmtId(proc));
+   return name;
 }
 
 /*
@@ -12376,60 +11275,44 @@ convertRegProcReference(Archive *fout, const char *proc)
  * Returns an allocated string of what to print, or NULL to print nothing.
  * Caller is responsible for free'ing result string.
  *
- * In 7.3 and up the input is a REGOPERATOR display; we have to strip the
- * argument-types part, and add OPERATOR() decoration if the name is
- * schema-qualified.  In older versions, the input is just a numeric OID,
- * which we search our operator list for.
+ * The input is a REGOPERATOR display; we have to strip the argument-types
+ * part, and add OPERATOR() decoration if the name is schema-qualified.
  */
 static char *
 convertOperatorReference(Archive *fout, const char *opr)
 {
-   OprInfo    *oprInfo;
+   char       *name;
+   char       *oname;
+   char       *ptr;
+   bool        inquote;
+   bool        sawdot;
 
    /* In all cases "0" means a null reference */
    if (strcmp(opr, "0") == 0)
        return NULL;
 
-   if (fout->remoteVersion >= 70300)
-   {
-       char       *name;
-       char       *oname;
-       char       *ptr;
-       bool        inquote;
-       bool        sawdot;
-
-       name = pg_strdup(opr);
-       /* find non-double-quoted left paren, and check for non-quoted dot */
-       inquote = false;
-       sawdot = false;
-       for (ptr = name; *ptr; ptr++)
+   name = pg_strdup(opr);
+   /* find non-double-quoted left paren, and check for non-quoted dot */
+   inquote = false;
+   sawdot = false;
+   for (ptr = name; *ptr; ptr++)
+   {
+       if (*ptr == '"')
+           inquote = !inquote;
+       else if (*ptr == '.' && !inquote)
+           sawdot = true;
+       else if (*ptr == '(' && !inquote)
        {
-           if (*ptr == '"')
-               inquote = !inquote;
-           else if (*ptr == '.' && !inquote)
-               sawdot = true;
-           else if (*ptr == '(' && !inquote)
-           {
-               *ptr = '\0';
-               break;
-           }
+           *ptr = '\0';
+           break;
        }
-       /* If not schema-qualified, don't need to add OPERATOR() */
-       if (!sawdot)
-           return name;
-       oname = psprintf("OPERATOR(%s)", name);
-       free(name);
-       return oname;
-   }
-
-   oprInfo = findOprByOid(atooid(opr));
-   if (oprInfo == NULL)
-   {
-       write_msg(NULL, "WARNING: could not find operator with OID %s\n",
-                 opr);
-       return NULL;
    }
-   return pg_strdup(oprInfo->dobj.name);
+   /* If not schema-qualified, don't need to add OPERATOR() */
+   if (!sawdot)
+       return name;
+   oname = psprintf("OPERATOR(%s)", name);
+   free(name);
+   return oname;
 }
 
 /*
@@ -12586,14 +11469,6 @@ dumpOpclass(Archive *fout, OpclassInfo *opcinfo)
    if (!opcinfo->dobj.dump || dopt->dataOnly)
        return;
 
-   /*
-    * XXX currently we do not implement dumping of operator classes from
-    * pre-7.3 databases.  This could be done but it seems not worth the
-    * trouble.
-    */
-   if (fout->remoteVersion < 70300)
-       return;
-
    query = createPQExpBuffer();
    q = createPQExpBuffer();
    delq = createPQExpBuffer();
@@ -13343,7 +12218,7 @@ dumpConversion(Archive *fout, ConvInfo *convinfo)
    appendStringLiteralAH(q, conforencoding, fout);
    appendPQExpBufferStr(q, " TO ");
    appendStringLiteralAH(q, contoencoding, fout);
-   /* regproc is automatically quoted in 7.3 and above */
+   /* regproc output is already sufficiently quoted */
    appendPQExpBuffer(q, " FROM %s;\n", conproc);
 
    appendPQExpBuffer(labelq, "CONVERSION %s", fmtId(convinfo->dobj.name));
@@ -13569,7 +12444,7 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
                          "AND p.oid = '%u'::pg_catalog.oid",
                          agginfo->aggfn.dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70300)
+   else
    {
        appendPQExpBuffer(query, "SELECT aggtransfn, "
                          "aggfinalfn, aggtranstype::pg_catalog.regtype, "
@@ -13587,41 +12462,6 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
                          "AND p.oid = '%u'::pg_catalog.oid",
                          agginfo->aggfn.dobj.catId.oid);
    }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query, "SELECT aggtransfn, aggfinalfn, "
-                         "format_type(aggtranstype, NULL) AS aggtranstype, "
-                         "'-' AS aggcombinefn, '-' AS aggserialfn, "
-                         "'-' AS aggdeserialfn, '-' AS aggmtransfn, "
-                         "'-' AS aggminvtransfn, '-' AS aggmfinalfn, "
-                         "0 AS aggmtranstype, false AS aggfinalextra, "
-                         "false AS aggmfinalextra, 0 AS aggsortop, "
-                         "false AS hypothetical, "
-                         "0 AS aggtransspace, agginitval, "
-                         "0 AS aggmtransspace, NULL AS aggminitval, "
-                         "true AS convertok "
-                         "FROM pg_aggregate "
-                         "WHERE oid = '%u'::oid",
-                         agginfo->aggfn.dobj.catId.oid);
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT aggtransfn1 AS aggtransfn, "
-                         "aggfinalfn, "
-                         "(SELECT typname FROM pg_type WHERE oid = aggtranstype1) AS aggtranstype, "
-                         "'-' AS aggcombinefn, '-' AS aggserialfn, "
-                         "'-' AS aggdeserialfn, '-' AS aggmtransfn, "
-                         "'-' AS aggminvtransfn, '-' AS aggmfinalfn, "
-                         "0 AS aggmtranstype, false AS aggfinalextra, "
-                         "false AS aggmfinalextra, 0 AS aggsortop, "
-                         "false AS hypothetical, "
-                         "0 AS aggtransspace, agginitval1 AS agginitval, "
-                         "0 AS aggmtransspace, NULL AS aggminitval, "
-                         "(aggtransfn2 = 0 and aggtranstype2 = 0 and agginitval2 is null) AS convertok "
-                         "FROM pg_aggregate "
-                         "WHERE oid = '%u'::oid",
-                         agginfo->aggfn.dobj.catId.oid);
-   }
 
    res = ExecuteSqlQueryForSingleRow(fout, query->data);
 
@@ -13701,28 +12541,9 @@ dumpAgg(Archive *fout, AggInfo *agginfo)
        return;
    }
 
-   if (fout->remoteVersion >= 70300)
-   {
-       /* If using 7.3's regproc or regtype, data is already quoted */
-       appendPQExpBuffer(details, "    SFUNC = %s,\n    STYPE = %s",
-                         aggtransfn,
-                         aggtranstype);
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       /* format_type quotes, regproc does not */
-       appendPQExpBuffer(details, "    SFUNC = %s,\n    STYPE = %s",
-                         fmtId(aggtransfn),
-                         aggtranstype);
-   }
-   else
-   {
-       /* need quotes all around */
-       appendPQExpBuffer(details, "    SFUNC = %s,\n",
-                         fmtId(aggtransfn));
-       appendPQExpBuffer(details, "    STYPE = %s",
-                         fmtId(aggtranstype));
-   }
+   /* regproc and regtype output is already sufficiently quoted */
+   appendPQExpBuffer(details, "    SFUNC = %s,\n    STYPE = %s",
+                     aggtransfn, aggtranstype);
 
    if (strcmp(aggtransspace, "0") != 0)
    {
@@ -15121,19 +13942,9 @@ createViewAsClause(Archive *fout, TableInfo *tbinfo)
    int         len;
 
    /* Fetch the view definition */
-   if (fout->remoteVersion >= 70300)
-   {
-       /* Beginning in 7.3, viewname is not unique; rely on OID */
-       appendPQExpBuffer(query,
+   appendPQExpBuffer(query,
         "SELECT pg_catalog.pg_get_viewdef('%u'::pg_catalog.oid) AS viewdef",
-                         tbinfo->dobj.catId.oid);
-   }
-   else
-   {
-       appendPQExpBufferStr(query, "SELECT definition AS viewdef "
-                            "FROM pg_views WHERE viewname = ");
-       appendStringLiteralAH(query, tbinfo->dobj.name, fout);
-   }
+                     tbinfo->dobj.catId.oid);
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -15370,17 +14181,10 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
                    {
                        appendPQExpBufferStr(q, " WITH OPTIONS");
                    }
-                   else if (fout->remoteVersion >= 70100)
-                   {
-                       appendPQExpBuffer(q, " %s",
-                                         tbinfo->atttypnames[j]);
-                   }
                    else
                    {
-                       /* If no format_type, fake it */
                        appendPQExpBuffer(q, " %s",
-                                         myFormatType(tbinfo->atttypnames[j],
-                                                      tbinfo->atttypmod[j]));
+                                         tbinfo->atttypnames[j]);
                    }
 
                    /* Add collation if not default for the type */
@@ -16283,52 +15087,6 @@ dumpTableConstraintComment(Archive *fout, ConstraintInfo *coninfo)
    destroyPQExpBuffer(labelq);
 }
 
-/*
- * findLastBuiltInOid -
- * find the last built in oid
- *
- * For 7.1 and 7.2, we do this by retrieving datlastsysoid from the
- * pg_database entry for the current database
- */
-static Oid
-findLastBuiltinOid_V71(Archive *fout, const char *dbname)
-{
-   PGresult   *res;
-   Oid         last_oid;
-   PQExpBuffer query = createPQExpBuffer();
-
-   resetPQExpBuffer(query);
-   appendPQExpBufferStr(query, "SELECT datlastsysoid from pg_database where datname = ");
-   appendStringLiteralAH(query, dbname, fout);
-
-   res = ExecuteSqlQueryForSingleRow(fout, query->data);
-   last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "datlastsysoid")));
-   PQclear(res);
-   destroyPQExpBuffer(query);
-   return last_oid;
-}
-
-/*
- * findLastBuiltInOid -
- * find the last built in oid
- *
- * For 7.0, we do this by assuming that the last thing that initdb does is to
- * create the pg_indexes view.  This sucks in general, but seeing that 7.0.x
- * initdb won't be changing anymore, it'll do.
- */
-static Oid
-findLastBuiltinOid_V70(Archive *fout)
-{
-   PGresult   *res;
-   int         last_oid;
-
-   res = ExecuteSqlQueryForSingleRow(fout,
-                   "SELECT oid FROM pg_class WHERE relname = 'pg_indexes'");
-   last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "oid")));
-   PQclear(res);
-   return last_oid;
-}
-
 /*
  * dumpSequence
  *   write the declaration (not data) of one user-defined sequence
@@ -16703,13 +15461,9 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
        {
            if (OidIsValid(tginfo->tgconstrrelid))
            {
-               /* If we are using regclass, name is already quoted */
-               if (fout->remoteVersion >= 70300)
-                   appendPQExpBuffer(query, "    FROM %s\n    ",
-                                     tginfo->tgconstrrelname);
-               else
-                   appendPQExpBuffer(query, "    FROM %s\n    ",
-                                     fmtId(tginfo->tgconstrrelname));
+               /* regclass output is already quoted */
+               appendPQExpBuffer(query, "    FROM %s\n    ",
+                                 tginfo->tgconstrrelname);
            }
            if (!tginfo->tgdeferrable)
                appendPQExpBufferStr(query, "NOT ");
@@ -16725,13 +15479,9 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
        else
            appendPQExpBufferStr(query, "    FOR EACH STATEMENT\n    ");
 
-       /* In 7.3, result of regproc is already quoted */
-       if (fout->remoteVersion >= 70300)
-           appendPQExpBuffer(query, "EXECUTE PROCEDURE %s(",
-                             tginfo->tgfname);
-       else
-           appendPQExpBuffer(query, "EXECUTE PROCEDURE %s(",
-                             fmtId(tginfo->tgfname));
+       /* regproc output is already sufficiently quoted */
+       appendPQExpBuffer(query, "EXECUTE PROCEDURE %s(",
+                         tginfo->tgfname);
 
        tgargs = (char *) PQunescapeBytea((unsigned char *) tginfo->tgargs,
                                          &lentgargs);
@@ -16923,19 +15673,9 @@ dumpRule(Archive *fout, RuleInfo *rinfo)
    delcmd = createPQExpBuffer();
    labelq = createPQExpBuffer();
 
-   if (fout->remoteVersion >= 70300)
-   {
-       appendPQExpBuffer(query,
-                         "SELECT pg_catalog.pg_get_ruledef('%u'::pg_catalog.oid) AS definition",
-                         rinfo->dobj.catId.oid);
-   }
-   else
-   {
-       /* Rule name was unique before 7.3 ... */
-       appendPQExpBuffer(query,
-                         "SELECT pg_get_ruledef('%s') AS definition",
-                         rinfo->dobj.name);
-   }
+   appendPQExpBuffer(query,
+     "SELECT pg_catalog.pg_get_ruledef('%u'::pg_catalog.oid) AS definition",
+                     rinfo->dobj.catId.oid);
 
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -17325,10 +16065,6 @@ getDependencies(Archive *fout)
    DumpableObject *dobj,
               *refdobj;
 
-   /* No dependency info available before 7.3 */
-   if (fout->remoteVersion < 70300)
-       return;
-
    if (g_verbose)
        write_msg(NULL, "reading dependency data\n");
 
@@ -17680,10 +16416,6 @@ selectSourceSchema(Archive *fout, const char *schemaName)
    /* This is checked by the callers already */
    Assert(schemaName != NULL && *schemaName != '\0');
 
-   /* Not relevant if fetching from pre-7.3 DB */
-   if (fout->remoteVersion < 70300)
-       return;
-
    query = createPQExpBuffer();
    appendPQExpBuffer(query, "SET search_path = %s",
                      fmtId(schemaName));
@@ -17699,8 +16431,8 @@ selectSourceSchema(Archive *fout, const char *schemaName)
  * getFormattedTypeName - retrieve a nicely-formatted type name for the
  * given type name.
  *
- * NB: in 7.3 and up the result may depend on the currently-selected
- * schema; this is why we don't try to cache the names.
+ * NB: the result may depend on the currently-selected search_path; this is
+ * why we don't try to cache the names.
  */
 static char *
 getFormattedTypeName(Archive *fout, Oid oid, OidOptions opts)
@@ -17722,36 +16454,13 @@ getFormattedTypeName(Archive *fout, Oid oid, OidOptions opts)
    }
 
    query = createPQExpBuffer();
-   if (fout->remoteVersion >= 70300)
-   {
-       appendPQExpBuffer(query, "SELECT pg_catalog.format_type('%u'::pg_catalog.oid, NULL)",
-                         oid);
-   }
-   else if (fout->remoteVersion >= 70100)
-   {
-       appendPQExpBuffer(query, "SELECT format_type('%u'::oid, NULL)",
-                         oid);
-   }
-   else
-   {
-       appendPQExpBuffer(query, "SELECT typname "
-                         "FROM pg_type "
-                         "WHERE oid = '%u'::oid",
-                         oid);
-   }
+   appendPQExpBuffer(query, "SELECT pg_catalog.format_type('%u'::pg_catalog.oid, NULL)",
+                     oid);
 
    res = ExecuteSqlQueryForSingleRow(fout, query->data);
 
-   if (fout->remoteVersion >= 70100)
-   {
-       /* already quoted */
-       result = pg_strdup(PQgetvalue(res, 0, 0));
-   }
-   else
-   {
-       /* may need to quote it */
-       result = pg_strdup(fmtId(PQgetvalue(res, 0, 0)));
-   }
+   /* result of format_type is already quoted */
+   result = pg_strdup(PQgetvalue(res, 0, 0));
 
    PQclear(res);
    destroyPQExpBuffer(query);
@@ -17759,76 +16468,6 @@ getFormattedTypeName(Archive *fout, Oid oid, OidOptions opts)
    return result;
 }
 
-/*
- * myFormatType --- local implementation of format_type for use with 7.0.
- */
-static char *
-myFormatType(const char *typname, int32 typmod)
-{
-   char       *result;
-   bool        isarray = false;
-   PQExpBuffer buf = createPQExpBuffer();
-
-   /* Handle array types */
-   if (typname[0] == '_')
-   {
-       isarray = true;
-       typname++;
-   }
-
-   /* Show lengths on bpchar and varchar */
-   if (strcmp(typname, "bpchar") == 0)
-   {
-       int         len = (typmod - VARHDRSZ);
-
-       appendPQExpBufferStr(buf, "character");
-       if (len > 1)
-           appendPQExpBuffer(buf, "(%d)",
-                             typmod - VARHDRSZ);
-   }
-   else if (strcmp(typname, "varchar") == 0)
-   {
-       appendPQExpBufferStr(buf, "character varying");
-       if (typmod != -1)
-           appendPQExpBuffer(buf, "(%d)",
-                             typmod - VARHDRSZ);
-   }
-   else if (strcmp(typname, "numeric") == 0)
-   {
-       appendPQExpBufferStr(buf, "numeric");
-       if (typmod != -1)
-       {
-           int32       tmp_typmod;
-           int         precision;
-           int         scale;
-
-           tmp_typmod = typmod - VARHDRSZ;
-           precision = (tmp_typmod >> 16) & 0xffff;
-           scale = tmp_typmod & 0xffff;
-           appendPQExpBuffer(buf, "(%d,%d)",
-                             precision, scale);
-       }
-   }
-
-   /*
-    * char is an internal single-byte data type; Let's make sure we force it
-    * through with quotes. - thomas 1998-12-13
-    */
-   else if (strcmp(typname, "char") == 0)
-       appendPQExpBufferStr(buf, "\"char\"");
-   else
-       appendPQExpBufferStr(buf, fmtId(typname));
-
-   /* Append array qualifier for array types */
-   if (isarray)
-       appendPQExpBufferStr(buf, "[]");
-
-   result = pg_strdup(buf->data);
-   destroyPQExpBuffer(buf);
-
-   return result;
-}
-
 /*
  * Return a column list clause for the given relation.
  *
index 2bfa2d974203b708bd2be61f7017d8e5450945ce..a60cf9573355fc55a2a4ee8533f3a55463876a00 100644 (file)
@@ -605,7 +605,6 @@ extern void parseOidArray(const char *str, Oid *array, int arraysize);
 extern void sortDumpableObjects(DumpableObject **objs, int numObjs,
                    DumpId preBoundaryId, DumpId postBoundaryId);
 extern void sortDumpableObjectsByTypeName(DumpableObject **objs, int numObjs);
-extern void sortDumpableObjectsByTypeOid(DumpableObject **objs, int numObjs);
 extern void sortDataAndIndexObjectsBySize(DumpableObject **objs, int numObjs);
 
 /*
index d87f08d35697c84f8d28dd55930fe144c34070fa..195b84a0d404eb743666b3975cc12e0776d72d57 100644 (file)
 static const char *modulename = gettext_noop("sorter");
 
 /*
- * Sort priority for object types when dumping a pre-7.3 database.
- * Objects are sorted by priority levels, and within an equal priority level
- * by OID.  (This is a relatively crude hack to provide semi-reasonable
- * behavior for old databases without full dependency info.)  Note: collations,
- * extensions, text search, foreign-data, materialized view, event trigger,
- * policies, transforms, access methods and default ACL objects can't really
- * happen here, so the rather bogus priorities for them don't matter.
- *
- * NOTE: object-type priorities must match the section assignments made in
- * pg_dump.c; that is, PRE_DATA objects must sort before DO_PRE_DATA_BOUNDARY,
- * POST_DATA objects must sort after DO_POST_DATA_BOUNDARY, and DATA objects
- * must sort between them.
- */
-static const int oldObjectTypePriority[] =
-{
-   1,                          /* DO_NAMESPACE */
-   1,                          /* DO_EXTENSION */
-   2,                          /* DO_TYPE */
-   2,                          /* DO_SHELL_TYPE */
-   2,                          /* DO_FUNC */
-   3,                          /* DO_AGG */
-   3,                          /* DO_OPERATOR */
-   3,                          /* DO_ACCESS_METHOD */
-   4,                          /* DO_OPCLASS */
-   4,                          /* DO_OPFAMILY */
-   4,                          /* DO_COLLATION */
-   5,                          /* DO_CONVERSION */
-   6,                          /* DO_TABLE */
-   8,                          /* DO_ATTRDEF */
-   15,                         /* DO_INDEX */
-   16,                         /* DO_RULE */
-   17,                         /* DO_TRIGGER */
-   14,                         /* DO_CONSTRAINT */
-   18,                         /* DO_FK_CONSTRAINT */
-   2,                          /* DO_PROCLANG */
-   2,                          /* DO_CAST */
-   11,                         /* DO_TABLE_DATA */
-   7,                          /* DO_DUMMY_TYPE */
-   4,                          /* DO_TSPARSER */
-   4,                          /* DO_TSDICT */
-   4,                          /* DO_TSTEMPLATE */
-   4,                          /* DO_TSCONFIG */
-   4,                          /* DO_FDW */
-   4,                          /* DO_FOREIGN_SERVER */
-   19,                         /* DO_DEFAULT_ACL */
-   4,                          /* DO_TRANSFORM */
-   9,                          /* DO_BLOB */
-   12,                         /* DO_BLOB_DATA */
-   10,                         /* DO_PRE_DATA_BOUNDARY */
-   13,                         /* DO_POST_DATA_BOUNDARY */
-   20,                         /* DO_EVENT_TRIGGER */
-   15,                         /* DO_REFRESH_MATVIEW */
-   21                          /* DO_POLICY */
-};
-
-/*
- * Sort priority for object types when dumping newer databases.
+ * Sort priority for database object types.
  * Objects are sorted by type, and within a type by name.
  *
  * NOTE: object-type priorities must match the section assignments made in
@@ -87,7 +31,7 @@ static const int oldObjectTypePriority[] =
  * POST_DATA objects must sort after DO_POST_DATA_BOUNDARY, and DATA objects
  * must sort between them.
  */
-static const int newObjectTypePriority[] =
+static const int dbObjectTypePriority[] =
 {
    1,                          /* DO_NAMESPACE */
    4,                          /* DO_EXTENSION */
@@ -134,7 +78,6 @@ static DumpId postDataBoundId;
 
 
 static int DOTypeNameCompare(const void *p1, const void *p2);
-static int DOTypeOidCompare(const void *p1, const void *p2);
 static bool TopoSort(DumpableObject **objs,
         int numObjs,
         DumpableObject **ordering,
@@ -266,8 +209,8 @@ DOTypeNameCompare(const void *p1, const void *p2)
    int         cmpval;
 
    /* Sort by type */
-   cmpval = newObjectTypePriority[obj1->objType] -
-       newObjectTypePriority[obj2->objType];
+   cmpval = dbObjectTypePriority[obj1->objType] -
+       dbObjectTypePriority[obj2->objType];
 
    if (cmpval != 0)
        return cmpval;
@@ -345,37 +288,6 @@ DOTypeNameCompare(const void *p1, const void *p2)
 }
 
 
-/*
- * Sort the given objects into a type/OID-based ordering
- *
- * This is used with pre-7.3 source databases as a crude substitute for the
- * lack of dependency information.
- */
-void
-sortDumpableObjectsByTypeOid(DumpableObject **objs, int numObjs)
-{
-   if (numObjs > 1)
-       qsort((void *) objs, numObjs, sizeof(DumpableObject *),
-             DOTypeOidCompare);
-}
-
-static int
-DOTypeOidCompare(const void *p1, const void *p2)
-{
-   DumpableObject *obj1 = *(DumpableObject *const *) p1;
-   DumpableObject *obj2 = *(DumpableObject *const *) p2;
-   int         cmpval;
-
-   cmpval = oldObjectTypePriority[obj1->objType] -
-       oldObjectTypePriority[obj2->objType];
-
-   if (cmpval != 0)
-       return cmpval;
-
-   return oidcmp(obj1->catId.oid, obj2->catId.oid);
-}
-
-
 /*
  * Sort the given objects into a safe dump order using dependency
  * information (to the extent we have it available).
index b5efb46019b99118ed656ac6e6a474cb08ac8f0c..82157e5620f81c410da994b7a2884f6cef0039ae 100644 (file)
@@ -480,10 +480,7 @@ main(int argc, char *argv[])
                dropDBs(conn);
 
            if (!roles_only && !no_tablespaces)
-           {
-               if (server_version >= 80000)
-                   dropTablespaces(conn);
-           }
+               dropTablespaces(conn);
 
            if (!tablespaces_only)
                dropRoles(conn);
@@ -505,12 +502,9 @@ main(int argc, char *argv[])
                dumpGroups(conn);
        }
 
+       /* Dump tablespaces */
        if (!roles_only && !no_tablespaces)
-       {
-           /* Dump tablespaces */
-           if (server_version >= 80000)
-               dumpTablespaces(conn);
-       }
+           dumpTablespaces(conn);
 
        /* Dump CREATE DATABASE commands */
        if (binary_upgrade || (!globals_only && !roles_only && !tablespaces_only))
@@ -886,9 +880,8 @@ dumpRoles(PGconn *conn)
     * We do it this way because config settings for roles could mention the
     * names of other roles.
     */
-   if (server_version >= 70300)
-       for (i = 0; i < PQntuples(res); i++)
-           dumpUserConfig(conn, PQgetvalue(res, i, i_rolname));
+   for (i = 0; i < PQntuples(res); i++)
+       dumpUserConfig(conn, PQgetvalue(res, i, i_rolname));
 
    PQclear(res);
 
@@ -1204,16 +1197,10 @@ dropDBs(PGconn *conn)
    PGresult   *res;
    int         i;
 
-   if (server_version >= 70100)
-       res = executeQuery(conn,
-                          "SELECT datname "
-                          "FROM pg_database d "
-                          "WHERE datallowconn ORDER BY 1");
-   else
-       res = executeQuery(conn,
-                          "SELECT datname "
-                          "FROM pg_database d "
-                          "ORDER BY 1");
+   res = executeQuery(conn,
+                      "SELECT datname "
+                      "FROM pg_database d "
+                      "WHERE datallowconn ORDER BY 1");
 
    if (PQntuples(res) > 0)
        fprintf(OPF, "--\n-- Drop databases\n--\n\n");
@@ -1269,12 +1256,10 @@ dumpCreateDB(PGconn *conn)
     * We will dump encoding and locale specifications in the CREATE DATABASE
     * commands for just those databases with values different from defaults.
     *
-    * We consider template0's encoding and locale (or, pre-7.1, template1's)
-    * to define the installation default.  Pre-8.4 installations do not have
-    * per-database locale settings; for them, every database must necessarily
-    * be using the installation default, so there's no need to do anything
-    * (which is good, since in very old versions there is no good way to find
-    * out what the installation locale is anyway...)
+    * We consider template0's encoding and locale to define the installation
+    * default.  Pre-8.4 installations do not have per-database locale
+    * settings; for them, every database must necessarily be using the
+    * installation default, so there's no need to do anything.
     */
    if (server_version >= 80400)
        res = executeQuery(conn,
@@ -1282,18 +1267,12 @@ dumpCreateDB(PGconn *conn)
                           "datcollate, datctype "
                           "FROM pg_database "
                           "WHERE datname = 'template0'");
-   else if (server_version >= 70100)
-       res = executeQuery(conn,
-                          "SELECT pg_encoding_to_char(encoding), "
-                          "null::text AS datcollate, null::text AS datctype "
-                          "FROM pg_database "
-                          "WHERE datname = 'template0'");
    else
        res = executeQuery(conn,
                           "SELECT pg_encoding_to_char(encoding), "
                           "null::text AS datcollate, null::text AS datctype "
                           "FROM pg_database "
-                          "WHERE datname = 'template1'");
+                          "WHERE datname = 'template0'");
 
    /* If for some reason the template DB isn't there, treat as unknown */
    if (PQntuples(res) > 0)
@@ -1371,7 +1350,7 @@ dumpCreateDB(PGconn *conn)
                           "(SELECT spcname FROM pg_tablespace t WHERE t.oid = d.dattablespace) AS dattablespace "
              "FROM pg_database d LEFT JOIN pg_authid u ON (datdba = u.oid) "
                           "WHERE datallowconn ORDER BY 1");
-   else if (server_version >= 80000)
+   else
        res = executeQuery(conn,
                           "SELECT datname, "
                           "coalesce(usename, (select usename from pg_shadow where usesysid=(select datdba from pg_database where datname='template0'))), "
@@ -1382,47 +1361,6 @@ dumpCreateDB(PGconn *conn)
                           "(SELECT spcname FROM pg_tablespace t WHERE t.oid = d.dattablespace) AS dattablespace "
           "FROM pg_database d LEFT JOIN pg_shadow u ON (datdba = usesysid) "
                           "WHERE datallowconn ORDER BY 1");
-   else if (server_version >= 70300)
-       res = executeQuery(conn,
-                          "SELECT datname, "
-                          "coalesce(usename, (select usename from pg_shadow where usesysid=(select datdba from pg_database where datname='template0'))), "
-                          "pg_encoding_to_char(d.encoding), "
-                          "null::text AS datcollate, null::text AS datctype, datfrozenxid, 0 AS datminmxid, "
-                          "datistemplate, datacl, '' as rdatacl, "
-                          "-1 as datconnlimit, "
-                          "'pg_default' AS dattablespace "
-          "FROM pg_database d LEFT JOIN pg_shadow u ON (datdba = usesysid) "
-                          "WHERE datallowconn ORDER BY 1");
-   else if (server_version >= 70100)
-       res = executeQuery(conn,
-                          "SELECT datname, "
-                          "coalesce("
-                   "(select usename from pg_shadow where usesysid=datdba), "
-                          "(select usename from pg_shadow where usesysid=(select datdba from pg_database where datname='template0'))), "
-                          "pg_encoding_to_char(d.encoding), "
-                          "null::text AS datcollate, null::text AS datctype, 0 AS datfrozenxid, 0 AS datminmxid, "
-                          "datistemplate, '' as datacl, '' as rdatacl, "
-                          "-1 as datconnlimit, "
-                          "'pg_default' AS dattablespace "
-                          "FROM pg_database d "
-                          "WHERE datallowconn ORDER BY 1");
-   else
-   {
-       /*
-        * Note: 7.0 fails to cope with sub-select in COALESCE, so just deal
-        * with getting a NULL by not printing any OWNER clause.
-        */
-       res = executeQuery(conn,
-                          "SELECT datname, "
-                   "(select usename from pg_shadow where usesysid=datdba), "
-                          "pg_encoding_to_char(d.encoding), "
-                          "null::text AS datcollate, null::text AS datctype, 0 AS datfrozenxid, 0 AS datminmxid, "
-                          "'f' as datistemplate, "
-                          "'' as datacl, '' as rdatacl, -1 as datconnlimit, "
-                          "'pg_default' AS dattablespace "
-                          "FROM pg_database d "
-                          "ORDER BY 1");
-   }
 
    for (i = 0; i < PQntuples(res); i++)
    {
@@ -1541,8 +1479,7 @@ dumpCreateDB(PGconn *conn)
 
        fprintf(OPF, "%s", buf->data);
 
-       if (server_version >= 70300)
-           dumpDatabaseConfig(conn, dbname);
+       dumpDatabaseConfig(conn, dbname);
 
        free(fdbname);
    }
@@ -1738,10 +1675,7 @@ dumpDatabases(PGconn *conn)
    PGresult   *res;
    int         i;
 
-   if (server_version >= 70100)
-       res = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1");
-   else
-       res = executeQuery(conn, "SELECT datname FROM pg_database ORDER BY 1");
+   res = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1");
 
    for (i = 0; i < PQntuples(res); i++)
    {
@@ -2062,11 +1996,11 @@ connectDatabase(const char *dbname, const char *connection_string,
    my_version = PG_VERSION_NUM;
 
    /*
-    * We allow the server to be back to 7.0, and up to any minor release of
+    * We allow the server to be back to 8.0, and up to any minor release of
     * our own major version.  (See also version check in pg_dump.c.)
     */
    if (my_version != server_version
-       && (server_version < 70000 ||
+       && (server_version < 80000 ||
            (server_version / 100) > (my_version / 100)))
    {
        fprintf(stderr, _("server version: %s; %s version: %s\n"),
@@ -2076,11 +2010,9 @@ connectDatabase(const char *dbname, const char *connection_string,
    }
 
    /*
-    * On 7.3 and later, make sure we are not fooled by non-system schemas in
-    * the search path.
+    * Make sure we are not fooled by non-system schemas in the search path.
     */
-   if (server_version >= 70300)
-       executeCommand(conn, "SET search_path = pg_catalog");
+   executeCommand(conn, "SET search_path = pg_catalog");
 
    return conn;
 }