This is an automated email from the ASF dual-hosted git repository.

tuhaihe pushed a commit to branch REL_2_STABLE
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 8bc719d8cfc98d5f6c1877e32d31f5072a11ce33
Author: Tom Lane <[email protected]>
AuthorDate: Fri Dec 31 11:39:26 2021 -0500

    pg_dump: minor performance improvements from eliminating sub-SELECTs.
    
    Backported from PG15 d5e8930f50e31d836d84b353b9dadedd5007bb70
    
    Conflicts resolved:
    * Updated getExtProtocols to use new method of
      role name lookups.
    
    Original commit message follows:
    
    Get rid of the "username_subquery" mechanism in favor of doing
    local lookups of role names from role OIDs.  The PG backend isn't
    terribly smart about scalar SubLinks in SELECT output lists,
    so this offers a small performance improvement, at least in
    installations with more than a couple of users.  In any case
    the old method didn't make for particularly readable SQL code.
    
    While at it, I removed the various custom warning messages about
    failing to find an object's owner, in favor of just fatal'ing
    in the local lookup function.  AFAIK there is no reason any
    longer to treat that as anything but a catalog-corruption case,
    and certainly no reason to make translators deal with a dozen
    different messages where one would do.  (If it turns out that
    fatal() is indeed a bad idea, we can back off to issuing
    pg_log_warning() and returning an empty string, resulting in
    the same behavior as before, except more consistent.)
    
    Also drop an entirely unnecessary sub-SELECT to check on the
    pg_depend status of a sequence relation: we already have a
    LEFT JOIN to fetch the row of interest in the FROM clause.
    
    Discussion: https://postgr.es/m/[email protected]
---
 src/bin/pg_dump/pg_dump.c | 489 ++++++++++++++++++++++------------------------
 src/bin/pg_dump/pg_dump.h |  43 ++--
 2 files changed, 260 insertions(+), 272 deletions(-)

diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 1f61c046578..69a05f30660 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -69,6 +69,12 @@
 #include "pg_dump.h"
 #include "storage/block.h"
 
+typedef struct
+{
+       Oid                     roleoid;                /* role's OID */
+       const char *rolename;           /* role's name */
+} RoleNameItem;
+
 typedef struct
 {
        const char *descr;                      /* comment for an object */
@@ -103,9 +109,6 @@ bool                isGPbackend;
 
 /* END MPP ADDITION */
 
-/* subquery used to convert user ID (eg, datdba) to user name */
-static const char *username_subquery;
-
 /*
  * For 8.0 and earlier servers, pulled from pg_database, for 8.1+ we use
  * FirstNormalObjectId - 1.
@@ -161,6 +164,10 @@ static DumpId binary_upgrade_dumpid;
 static bool have_extra_float_digits = false;
 static int     extra_float_digits;
 
+/* sorted table of role names */
+static RoleNameItem *rolenames = NULL;
+static int     nrolenames = 0;
+
 /* sorted table of comments */
 static CommentItem *comments = NULL;
 static int     ncomments = 0;
@@ -219,6 +226,8 @@ static void guessConstraintInheritance(TableInfo *tblinfo, 
int numTables);
 static void dumpComment(Archive *fout, const char *type, const char *name,
                                                const char *namespace, const 
char *owner,
                                                CatalogId catalogId, int subid, 
DumpId dumpId);
+static const char *getRoleName(const char *roleoid_str);
+static void collectRoleNames(Archive *fout);
 static void getAdditionalACLs(Archive *fout);
 static int     findComments(Archive *fout, Oid classoid, Oid objoid,
                                                 CommentItem **items);
@@ -1011,8 +1020,6 @@ main(int argc, char **argv)
        if (fout->isStandby)
                dopt.no_unlogged_table_data = true;
 
-       username_subquery = "SELECT rolname FROM pg_catalog.pg_roles WHERE oid 
=";
-
        /*
         * Remember whether or not this GP database supports partitioning.
         */
@@ -1103,6 +1110,11 @@ main(int argc, char **argv)
        if (dopt.include_everything && !dopt.schemaOnly && 
!dopt.dontOutputBlobs)
                dopt.outputBlobs = true;
 
+       /*
+        * Collect role names so we can map object owner OIDs to names.
+        */
+       collectRoleNames(fout);
+
        /*
         * Now scan the database and create DumpableObject structs for all the
         * objects we intend to dump.
@@ -3388,7 +3400,7 @@ dumpDatabase(Archive *fout)
        int                     i_tableoid,
                                i_oid,
                                i_datname,
-                               i_dba,
+                               i_datdba,
                                i_encoding,
                                i_collate,
                                i_ctype,
@@ -3422,7 +3434,7 @@ dumpDatabase(Archive *fout)
        if (fout->remoteVersion >= 90300)
        {
                appendPQExpBuffer(dbQry, "SELECT tableoid, oid, datname, "
-                                                 "(%s datdba) AS dba, "
+                                                 "datdba, "
                                                  
"pg_encoding_to_char(encoding) AS encoding, "
                                                  "datcollate, datctype, 
datfrozenxid, datminmxid, "
                                                  "datacl, acldefault('d', 
datdba) AS acldefault, "
@@ -3431,13 +3443,12 @@ dumpDatabase(Archive *fout)
                                                  "shobj_description(oid, 
'pg_database') AS description "
 
                                                  "FROM pg_database "
-                                                 "WHERE datname = 
current_database()",
-                                                 username_subquery);
+                                                 "WHERE datname = 
current_database()");
        }
        else if (fout->remoteVersion >= 90200)
        {
                appendPQExpBuffer(dbQry, "SELECT tableoid, oid, datname, "
-                                                 "(%s datdba) AS dba, "
+                                                 "datdba, "
                                                  
"pg_encoding_to_char(encoding) AS encoding, "
                                                  "datcollate, datctype, 
datfrozenxid, 0 AS datminmxid, "
                                                  "datacl, acldefault('d', 
datdba) AS acldefault, "
@@ -3446,13 +3457,12 @@ dumpDatabase(Archive *fout)
                                                  "shobj_description(oid, 
'pg_database') AS description "
 
                                                  "FROM pg_database "
-                                                 "WHERE datname = 
current_database()",
-                                                 username_subquery);
+                                                 "WHERE datname = 
current_database()");
        }
        else if (fout->remoteVersion >= 80400)
        {
                appendPQExpBuffer(dbQry, "SELECT tableoid, oid, datname, "
-                                                 "(%s datdba) AS dba, "
+                                                 "datdba, "
                                                  
"pg_encoding_to_char(encoding) AS encoding, "
                                                  "datcollate, datctype, 
datfrozenxid, 0 AS datminmxid, "
                                                  "datacl, NULL AS acldefault, "
@@ -3461,13 +3471,12 @@ dumpDatabase(Archive *fout)
                                                  "shobj_description(oid, 
'pg_database') AS description "
 
                                                  "FROM pg_database "
-                                                 "WHERE datname = 
current_database()",
-                                                 username_subquery);
+                                                 "WHERE datname = 
current_database()");
        }
        else
        {
                appendPQExpBuffer(dbQry, "SELECT tableoid, oid, datname, "
-                                                 "(%s datdba) AS dba, "
+                                                 "datdba, "
                                                  
"pg_encoding_to_char(encoding) AS encoding, "
                                                  "NULL AS datcollate, NULL AS 
datctype, datfrozenxid, 0 AS datminmxid, "
                                                  "datacl, NULL AS acldefault, "
@@ -3476,8 +3485,7 @@ dumpDatabase(Archive *fout)
                                                  "shobj_description(oid, 
'pg_database') AS description "
 
                                                  "FROM pg_database "
-                                                 "WHERE datname = 
current_database()",
-                                                 username_subquery);
+                                                 "WHERE datname = 
current_database()");
        }
 
        res = ExecuteSqlQueryForSingleRow(fout, dbQry->data);
@@ -3485,7 +3493,7 @@ dumpDatabase(Archive *fout)
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
        i_datname = PQfnumber(res, "datname");
-       i_dba = PQfnumber(res, "dba");
+       i_datdba = PQfnumber(res, "datdba");
        i_encoding = PQfnumber(res, "encoding");
        i_collate = PQfnumber(res, "datcollate");
        i_ctype = PQfnumber(res, "datctype");
@@ -3500,7 +3508,7 @@ dumpDatabase(Archive *fout)
        dbCatId.tableoid = atooid(PQgetvalue(res, 0, i_tableoid));
        dbCatId.oid = atooid(PQgetvalue(res, 0, i_oid));
        datname = PQgetvalue(res, 0, i_datname);
-       dba = PQgetvalue(res, 0, i_dba);
+       dba = getRoleName(PQgetvalue(res, 0, i_datdba));
        encoding = PQgetvalue(res, 0, i_encoding);
        collate = PQgetvalue(res, 0, i_collate);
        ctype = PQgetvalue(res, 0, i_ctype);
@@ -3983,17 +3991,15 @@ getBlobs(Archive *fout)
        if (fout->remoteVersion >= 90200)
        {
                appendPQExpBuffer(blobQry,
-                                                 "SELECT oid, (%s lomowner) AS 
rolname, lomacl, "
+                                                 "SELECT oid, lomowner, 
lomacl, "
                                                  "acldefault('L', lomowner) AS 
acldefault "
-                                                 "FROM 
pg_largeobject_metadata",
-                                                 username_subquery);
+                                                 "FROM 
pg_largeobject_metadata");
        }
        else if (fout->remoteVersion >= 90000)
                appendPQExpBuffer(blobQry,
-                                                 "SELECT oid, (%s lomowner) AS 
rolname, lomacl, "
+                                                 "SELECT oid, lomowner, 
lomacl, "
                                                  "NULL AS acldefault "
-                                                 "FROM 
pg_largeobject_metadata",
-                                                 username_subquery);
+                                                 "FROM 
pg_largeobject_metadata");
        else
                appendPQExpBufferStr(blobQry,
                                                         "SELECT DISTINCT loid 
AS oid, "
@@ -4004,7 +4010,7 @@ getBlobs(Archive *fout)
        res = ExecuteSqlQuery(fout, blobQry->data, PGRES_TUPLES_OK);
 
        i_oid = PQfnumber(res, "oid");
-       i_lomowner = PQfnumber(res, "rolname");
+       i_lomowner = PQfnumber(res, "lomowner");
        i_lomacl = PQfnumber(res, "lomacl");
        i_acldefault = PQfnumber(res, "acldefault");
 
@@ -4027,7 +4033,7 @@ getBlobs(Archive *fout)
                binfo[i].dacl.acldefault = pg_strdup(PQgetvalue(res, i, 
i_acldefault));
                binfo[i].dacl.privtype = 0;
                binfo[i].dacl.initprivs = NULL;
-               binfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_lomowner));
+               binfo[i].rolname = getRoleName(PQgetvalue(res, i, i_lomowner));
 
                /* Blobs have data */
                binfo[i].dobj.components |= DUMP_COMPONENT_DATA;
@@ -4494,7 +4500,7 @@ getPublications(Archive *fout, int *numPublications)
        int                     i_tableoid;
        int                     i_oid;
        int                     i_pubname;
-       int                     i_rolname;
+       int                     i_pubowner;
        int                     i_puballtables;
        int                     i_pubinsert;
        int                     i_pubupdate;
@@ -4518,24 +4524,15 @@ getPublications(Archive *fout, int *numPublications)
        if (fout->remoteVersion >= 130000)
                appendPQExpBuffer(query,
                                                  "SELECT p.tableoid, p.oid, 
p.pubname, "
-                                                 "(%s p.pubowner) AS rolname, "
-                                                 "p.puballtables, p.pubinsert, 
p.pubupdate, p.pubdelete, p.pubtruncate, p.pubviaroot "
-                                                 "FROM pg_publication p",
-                                                 username_subquery);
-       else if (fout->remoteVersion >= 110000)
-               appendPQExpBuffer(query,
-                                                 "SELECT p.tableoid, p.oid, 
p.pubname, "
-                                                 "(%s p.pubowner) AS rolname, "
+                                                 "p.pubowner, "
                                                  "p.puballtables, p.pubinsert, 
p.pubupdate, p.pubdelete, p.pubtruncate, false AS pubviaroot "
-                                                 "FROM pg_publication p",
-                                                 username_subquery);
+                                                 "FROM pg_publication p");
        else
                appendPQExpBuffer(query,
                                                  "SELECT p.tableoid, p.oid, 
p.pubname, "
-                                                 "(%s p.pubowner) AS rolname, "
+                                                 "p.pubowner, "
                                                  "p.puballtables, p.pubinsert, 
p.pubupdate, p.pubdelete, false AS pubtruncate, false AS pubviaroot "
-                                                 "FROM pg_publication p",
-                                                 username_subquery);
+                                                 "FROM pg_publication p");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -4544,7 +4541,7 @@ getPublications(Archive *fout, int *numPublications)
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
        i_pubname = PQfnumber(res, "pubname");
-       i_rolname = PQfnumber(res, "rolname");
+       i_pubowner = PQfnumber(res, "pubowner");
        i_puballtables = PQfnumber(res, "puballtables");
        i_pubinsert = PQfnumber(res, "pubinsert");
        i_pubupdate = PQfnumber(res, "pubupdate");
@@ -4562,7 +4559,7 @@ getPublications(Archive *fout, int *numPublications)
                pubinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
                AssignDumpId(&pubinfo[i].dobj);
                pubinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_pubname));
-               pubinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               pubinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_pubowner));
                pubinfo[i].puballtables =
                        (strcmp(PQgetvalue(res, i, i_puballtables), "t") == 0);
                pubinfo[i].pubinsert =
@@ -4576,10 +4573,6 @@ getPublications(Archive *fout, int *numPublications)
                pubinfo[i].pubviaroot =
                        (strcmp(PQgetvalue(res, i, i_pubviaroot), "t") == 0);
 
-               if (strlen(pubinfo[i].rolname) == 0)
-                       pg_log_warning("owner of publication \"%s\" appears to 
be invalid",
-                                                  pubinfo[i].dobj.name);
-
                /* Decide whether we want to dump it */
                selectDumpableObject(&(pubinfo[i].dobj), fout);
        }
@@ -4863,7 +4856,7 @@ getSubscriptions(Archive *fout)
        int                     i_tableoid;
        int                     i_oid;
        int                     i_subname;
-       int                     i_rolname;
+       int                     i_subowner;
        int                     i_substream;
        int                     i_subconninfo;
        int                     i_subslotname;
@@ -4896,26 +4889,21 @@ getSubscriptions(Archive *fout)
 
        /* Get the subscriptions in current database. */
        appendPQExpBuffer(query,
-                                         "SELECT s.tableoid, s.oid, 
s.subname,\n"
-                                         " (%s s.subowner) AS rolname,\n"
-                                         " s.subconninfo, s.subslotname, 
s.subsynccommit,\n"
-                                         " s.subpublications,\n",
-                                         username_subquery);
-
-       if (fout->remoteVersion >= 140000)
-               appendPQExpBufferStr(query, " s.subbinary,\n");
-       else
-               appendPQExpBufferStr(query, " false AS subbinary,\n");
-
+                                         "SELECT s.tableoid, s.oid, s.subname, 
"
+                                         "s.subowner, "
+                                         "s.subconninfo, s.subslotname, 
s.subsynccommit, "
+                                         "s.subpublications, ");
+       
        if (fout->remoteVersion >= 140000)
-               appendPQExpBufferStr(query, " s.substream\n");
+               appendPQExpBufferStr(query, " s.subbinary, s.substream\n");
        else
-               appendPQExpBufferStr(query, " false AS substream\n");
-
-       appendPQExpBufferStr(query,
-                                                "FROM pg_subscription s\n"
-                                                "WHERE s.subdbid = (SELECT oid 
FROM pg_database\n"
-                                                "                   WHERE 
datname = current_database())");
+               appendPQExpBufferStr(query, " false AS subbinary, false AS 
substream\n");
+       
+       
+       appendPQExpBuffer(query,
+                                         "FROM pg_subscription s "
+                                         "WHERE s.subdbid = (SELECT oid FROM 
pg_database"
+                                         "                   WHERE datname = 
current_database())");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -4924,7 +4912,7 @@ getSubscriptions(Archive *fout)
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
        i_subname = PQfnumber(res, "subname");
-       i_rolname = PQfnumber(res, "rolname");
+       i_subowner = PQfnumber(res, "subowner");
        i_subconninfo = PQfnumber(res, "subconninfo");
        i_subslotname = PQfnumber(res, "subslotname");
        i_subsynccommit = PQfnumber(res, "subsynccommit");
@@ -4942,7 +4930,7 @@ getSubscriptions(Archive *fout)
                subinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
                AssignDumpId(&subinfo[i].dobj);
                subinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_subname));
-               subinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               subinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_subowner));
                subinfo[i].subconninfo = pg_strdup(PQgetvalue(res, i, 
i_subconninfo));
                if (PQgetisnull(res, i, i_subslotname))
                        subinfo[i].subslotname = NULL;
@@ -4957,10 +4945,6 @@ getSubscriptions(Archive *fout)
                subinfo[i].substream =
                        pg_strdup(PQgetvalue(res, i, i_substream));
 
-               if (strlen(subinfo[i].rolname) == 0)
-                       pg_log_warning("owner of subscription \"%s\" appears to 
be invalid",
-                                                  subinfo[i].dobj.name);
-
                /* Decide whether we want to dump it */
                selectDumpableObject(&(subinfo[i].dobj), fout);
        }
@@ -5756,7 +5740,7 @@ getNamespaces(Archive *fout, int *numNamespaces)
        int                     i_tableoid;
        int                     i_oid;
        int                     i_nspname;
-       int                     i_rolname;
+       int                     i_nspowner;
        int                     i_nspacl;
        int                     i_acldefault;
 
@@ -5768,11 +5752,10 @@ getNamespaces(Archive *fout, int *numNamespaces)
         */
        if (fout->remoteVersion >= 90200)
                appendPQExpBuffer(query, "SELECT n.tableoid, n.oid, n.nspname, "
-                                                 "(%s nspowner) AS rolname, "
+                                                 "n.nspowner, "
                                                  "n.nspacl, "
                                                  "acldefault('n', n.nspowner) 
AS acldefault "
-                                                 "FROM pg_namespace n",
-                                                 username_subquery);
+                                                 "FROM pg_namespace n");
        else
                appendPQExpBuffer(query, "SELECT n.tableoid, n.oid, n.nspname, "
                                                  "n.nspowner, "
@@ -5788,12 +5771,14 @@ getNamespaces(Archive *fout, int *numNamespaces)
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
        i_nspname = PQfnumber(res, "nspname");
-       i_rolname = PQfnumber(res, "rolname");
+       i_nspowner = PQfnumber(res, "nspowner");
        i_nspacl = PQfnumber(res, "nspacl");
        i_acldefault = PQfnumber(res, "acldefault");
 
        for (i = 0; i < ntups; i++)
        {
+               const char *nspowner;
+
                nsinfo[i].dobj.objType = DO_NAMESPACE;
                nsinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, 
i_tableoid));
                nsinfo[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid));
@@ -5803,7 +5788,9 @@ getNamespaces(Archive *fout, int *numNamespaces)
                nsinfo[i].dacl.acldefault = pg_strdup(PQgetvalue(res, i, 
i_acldefault));
                nsinfo[i].dacl.privtype = 0;
                nsinfo[i].dacl.initprivs = NULL;
-               nsinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               nspowner = PQgetvalue(res, i, i_nspowner);
+               nsinfo[i].nspowner = atooid(nspowner);
+               nsinfo[i].rolname = getRoleName(nspowner);
 
                /* Decide whether to dump this namespace */
                selectDumpableNamespace(&nsinfo[i], fout);
@@ -5811,12 +5798,6 @@ getNamespaces(Archive *fout, int *numNamespaces)
                /* Mark whether namespace has an ACL */
                if (!PQgetisnull(res, i, i_nspacl))
                        nsinfo[i].dobj.components |= DUMP_COMPONENT_ACL;
-
-
-
-               if (strlen(nsinfo[i].rolname) == 0)
-                       pg_log_warning("owner of schema \"%s\" appears to be 
invalid",
-                                                  nsinfo[i].dobj.name);
        }
 
        PQclear(res);
@@ -5964,7 +5945,7 @@ getTypes(Archive *fout, int *numTypes)
        int                     i_typnamespace;
        int                     i_typacl;
        int                     i_acldefault;
-       int                     i_rolname;
+       int                     i_typowner;
        int                     i_typelem;
        int                     i_typrelid;
        int                     i_typrelkind;
@@ -5994,7 +5975,7 @@ getTypes(Archive *fout, int *numTypes)
                appendPQExpBuffer(query, "SELECT t.tableoid, t.oid, t.typname, "
                                                  "t.typnamespace, t.typacl, "
                                                  "acldefault('T', t.typowner) 
AS acldefault, "
-                                                 "(%s t.typowner) AS rolname, "
+                                                 "typowner, "
                                                  "t.typelem, t.typrelid, "
                                                  "CASE WHEN t.typrelid = 0 
THEN ' '::\"char\" "
                                                  "ELSE (SELECT relkind FROM 
pg_class WHERE oid = t.typrelid) END AS typrelkind, "
@@ -6003,15 +5984,14 @@ getTypes(Archive *fout, int *numTypes)
                                                  "(SELECT typarray FROM 
pg_type te WHERE oid = t.typelem) = t.oid AS isarray, "
                                                        
"coalesce(array_to_string(e.typoptions, ', '), '') AS typstorage "
                                                  "FROM pg_type t "
-                                                       "LEFT JOIN 
pg_type_encoding e ON t.oid = e.typid ",
-                                                 username_subquery);
+                                                       "LEFT JOIN 
pg_type_encoding e ON t.oid = e.typid ");
        }
        else
        {
                appendPQExpBuffer(query, "SELECT t.tableoid, t.oid, t.typname, "
                                                  "t.typnamespace, NULL AS 
typacl, "
                                                  "NULL AS acldefault, "
-                                                 "(%s t.typowner) AS rolname, "
+                                                 "typowner, "
                                                  "t.typelem, t.typrelid, "
                                                  "CASE WHEN t.typrelid = 0 
THEN ' '::\"char\" "
                                                  "ELSE (SELECT relkind FROM 
pg_class WHERE oid = t.typrelid) END AS typrelkind, "
@@ -6020,8 +6000,7 @@ getTypes(Archive *fout, int *numTypes)
                                                  "(SELECT typarray FROM 
pg_type te WHERE oid = t.typelem) = t.oid AS isarray, "
                                                        
"coalesce(array_to_string(e.typoptions, ', '), '') AS typstorage "
                                                  "FROM pg_type t "
-                                                       "LEFT JOIN 
pg_type_encoding e ON t.oid = e.typid ",
-                                                 username_subquery);
+                                                       "LEFT JOIN 
pg_type_encoding e ON t.oid = e.typid ");
        }
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
@@ -6036,7 +6015,7 @@ getTypes(Archive *fout, int *numTypes)
        i_typnamespace = PQfnumber(res, "typnamespace");
        i_typacl = PQfnumber(res, "typacl");
        i_acldefault = PQfnumber(res, "acldefault");
-       i_rolname = PQfnumber(res, "rolname");
+       i_typowner = PQfnumber(res, "typowner");
        i_typelem = PQfnumber(res, "typelem");
        i_typrelid = PQfnumber(res, "typrelid");
        i_typrelkind = PQfnumber(res, "typrelkind");
@@ -6059,7 +6038,7 @@ getTypes(Archive *fout, int *numTypes)
                tyinfo[i].dacl.privtype = 0;
                tyinfo[i].dacl.initprivs = NULL;
                tyinfo[i].ftypname = NULL;      /* may get filled later */
-               tyinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               tyinfo[i].rolname = getRoleName(PQgetvalue(res, i, i_typowner));
                tyinfo[i].typelem = atooid(PQgetvalue(res, i, i_typelem));
                tyinfo[i].typrelid = atooid(PQgetvalue(res, i, i_typrelid));
                tyinfo[i].typrelkind = *PQgetvalue(res, i, i_typrelkind);
@@ -6129,10 +6108,6 @@ getTypes(Archive *fout, int *numTypes)
                         */
                        stinfo->dobj.dump = DUMP_COMPONENT_NONE;
                }
-
-               if (strlen(tyinfo[i].rolname) == 0)
-                       pg_log_warning("owner of data type \"%s\" appears to be 
invalid",
-                                                  tyinfo[i].dobj.name);
        }
 
        *numTypes = ntups;
@@ -6163,7 +6138,7 @@ getOperators(Archive *fout, int *numOprs)
        int                     i_oid;
        int                     i_oprname;
        int                     i_oprnamespace;
-       int                     i_rolname;
+       int                     i_oprowner;
        int                     i_oprkind;
        int                     i_oprcode;
 
@@ -6174,11 +6149,10 @@ getOperators(Archive *fout, int *numOprs)
 
        appendPQExpBuffer(query, "SELECT tableoid, oid, oprname, "
                                          "oprnamespace, "
-                                         "(%s oprowner) AS rolname, "
+                                         "oprowner, "
                                          "oprkind, "
                                          "oprcode::oid AS oprcode "
-                                         "FROM pg_operator",
-                                         username_subquery);
+                                         "FROM pg_operator");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -6191,7 +6165,7 @@ getOperators(Archive *fout, int *numOprs)
        i_oid = PQfnumber(res, "oid");
        i_oprname = PQfnumber(res, "oprname");
        i_oprnamespace = PQfnumber(res, "oprnamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_oprowner = PQfnumber(res, "oprowner");
        i_oprkind = PQfnumber(res, "oprkind");
        i_oprcode = PQfnumber(res, "oprcode");
 
@@ -6204,16 +6178,12 @@ getOperators(Archive *fout, int *numOprs)
                oprinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_oprname));
                oprinfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_oprnamespace)));
-               oprinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               oprinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_oprowner));
                oprinfo[i].oprkind = (PQgetvalue(res, i, i_oprkind))[0];
                oprinfo[i].oprcode = atooid(PQgetvalue(res, i, i_oprcode));
 
                /* Decide whether we want to dump it */
                selectDumpableObject(&(oprinfo[i].dobj), fout);
-
-               if (strlen(oprinfo[i].rolname) == 0)
-                       pg_log_warning("owner of operator \"%s\" appears to be 
invalid",
-                                                  oprinfo[i].dobj.name);
        }
 
        PQclear(res);
@@ -6242,7 +6212,7 @@ getCollations(Archive *fout, int *numCollations)
        int                     i_oid;
        int                     i_collname;
        int                     i_collnamespace;
-       int                     i_rolname;
+       int                     i_collowner;
 
        /* Collations didn't exist pre-9.1 */
        if (fout->remoteVersion < 90100)
@@ -6260,9 +6230,8 @@ getCollations(Archive *fout, int *numCollations)
 
        appendPQExpBuffer(query, "SELECT tableoid, oid, collname, "
                                          "collnamespace, "
-                                         "(%s collowner) AS rolname "
-                                         "FROM pg_collation",
-                                         username_subquery);
+                                         "collowner "
+                                         "FROM pg_collation");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -6275,7 +6244,7 @@ getCollations(Archive *fout, int *numCollations)
        i_oid = PQfnumber(res, "oid");
        i_collname = PQfnumber(res, "collname");
        i_collnamespace = PQfnumber(res, "collnamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_collowner = PQfnumber(res, "collowner");
 
        for (i = 0; i < ntups; i++)
        {
@@ -6286,7 +6255,7 @@ getCollations(Archive *fout, int *numCollations)
                collinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, 
i_collname));
                collinfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_collnamespace)));
-               collinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               collinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_collowner));
 
                /* Decide whether we want to dump it */
                selectDumpableObject(&(collinfo[i].dobj), fout);
@@ -6318,7 +6287,7 @@ getConversions(Archive *fout, int *numConversions)
        int                     i_oid;
        int                     i_conname;
        int                     i_connamespace;
-       int                     i_rolname;
+       int                     i_conowner;
 
        query = createPQExpBuffer();
 
@@ -6329,9 +6298,8 @@ getConversions(Archive *fout, int *numConversions)
 
        appendPQExpBuffer(query, "SELECT tableoid, oid, conname, "
                                          "connamespace, "
-                                         "(%s conowner) AS rolname "
-                                         "FROM pg_conversion",
-                                         username_subquery);
+                                         "conowner "
+                                         "FROM pg_conversion");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -6344,7 +6312,7 @@ getConversions(Archive *fout, int *numConversions)
        i_oid = PQfnumber(res, "oid");
        i_conname = PQfnumber(res, "conname");
        i_connamespace = PQfnumber(res, "connamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_conowner = PQfnumber(res, "conowner");
 
        for (i = 0; i < ntups; i++)
        {
@@ -6355,7 +6323,7 @@ getConversions(Archive *fout, int *numConversions)
                convinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, 
i_conname));
                convinfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_connamespace)));
-               convinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               convinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_conowner));
 
                /* Decide whether we want to dump it */
                selectDumpableObject(&(convinfo[i].dobj), fout);
@@ -6458,7 +6426,7 @@ getOpclasses(Archive *fout, int *numOpclasses)
        int                     i_oid;
        int                     i_opcname;
        int                     i_opcnamespace;
-       int                     i_rolname;
+       int                     i_opcowner;
 
        /*
         * find all opclasses, including builtin opclasses; we filter out
@@ -6467,9 +6435,8 @@ getOpclasses(Archive *fout, int *numOpclasses)
 
        appendPQExpBuffer(query, "SELECT tableoid, oid, opcname, "
                                          "opcnamespace, "
-                                         "(%s opcowner) AS rolname "
-                                         "FROM pg_opclass",
-                                         username_subquery);
+                                         "opcowner "
+                                         "FROM pg_opclass");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -6482,7 +6449,7 @@ getOpclasses(Archive *fout, int *numOpclasses)
        i_oid = PQfnumber(res, "oid");
        i_opcname = PQfnumber(res, "opcname");
        i_opcnamespace = PQfnumber(res, "opcnamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_opcowner = PQfnumber(res, "opcowner");
 
        for (i = 0; i < ntups; i++)
        {
@@ -6493,14 +6460,10 @@ getOpclasses(Archive *fout, int *numOpclasses)
                opcinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_opcname));
                opcinfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_opcnamespace)));
-               opcinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               opcinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_opcowner));
 
                /* Decide whether we want to dump it */
                selectDumpableObject(&(opcinfo[i].dobj), fout);
-
-               if (strlen(opcinfo[i].rolname) == 0)
-                       pg_log_warning("owner of operator class \"%s\" appears 
to be invalid",
-                                                  opcinfo[i].dobj.name);
        }
 
        PQclear(res);
@@ -6529,7 +6492,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
        int                     i_oid;
        int                     i_opfname;
        int                     i_opfnamespace;
-       int                     i_rolname;
+       int                     i_opfowner;
 
        /* Before 8.3, there is no separate concept of opfamilies */
        if (fout->remoteVersion < 80300)
@@ -6547,9 +6510,8 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
 
        appendPQExpBuffer(query, "SELECT tableoid, oid, opfname, "
                                          "opfnamespace, "
-                                         "(%s opfowner) AS rolname "
-                                         "FROM pg_opfamily",
-                                         username_subquery);
+                                         "opfowner "
+                                         "FROM pg_opfamily");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -6562,7 +6524,7 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
        i_oid = PQfnumber(res, "oid");
        i_opfname = PQfnumber(res, "opfname");
        i_opfnamespace = PQfnumber(res, "opfnamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_opfowner = PQfnumber(res, "opfowner");
 
        for (i = 0; i < ntups; i++)
        {
@@ -6573,14 +6535,10 @@ getOpfamilies(Archive *fout, int *numOpfamilies)
                opfinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_opfname));
                opfinfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_opfnamespace)));
-               opfinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               opfinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_opfowner));
 
                /* Decide whether we want to dump it */
                selectDumpableObject(&(opfinfo[i].dobj), fout);
-
-               if (strlen(opfinfo[i].rolname) == 0)
-                       pg_log_warning("owner of operator family \"%s\" appears 
to be invalid",
-                                                  opfinfo[i].dobj.name);
        }
 
        PQclear(res);
@@ -6612,7 +6570,7 @@ getAggregates(Archive *fout, int *numAggs)
        int                     i_aggnamespace;
        int                     i_pronargs;
        int                     i_proargtypes;
-       int                     i_rolname;
+       int                     i_proowner;
        int                     i_aggacl;
        int                     i_acldefault;
 
@@ -6631,7 +6589,7 @@ getAggregates(Archive *fout, int *numAggs)
                                                  "p.proname AS aggname, "
                                                  "p.pronamespace AS 
aggnamespace, "
                                                  "p.pronargs, p.proargtypes, "
-                                                 "(%s p.proowner) AS rolname, "
+                                                 "p.proowner, "
                                                  "p.proacl AS aggacl, "
                                                  "acldefault('f', p.proowner) 
AS acldefault "
                                                  "FROM pg_proc p "
@@ -6644,7 +6602,6 @@ getAggregates(Archive *fout, int *numAggs)
                                                  "(SELECT oid FROM 
pg_namespace "
                                                  "WHERE nspname = 
'pg_catalog') OR "
                                                  "p.proacl IS DISTINCT FROM 
pip.initprivs",
-                                                 username_subquery,
                                                  agg_check);
                if (dopt->binary_upgrade)
                        appendPQExpBufferStr(query,
@@ -6660,15 +6617,14 @@ getAggregates(Archive *fout, int *numAggs)
                appendPQExpBuffer(query, "SELECT tableoid, oid, proname AS 
aggname, "
                                                  "pronamespace AS 
aggnamespace, "
                                                  "pronargs, proargtypes, "
-                                                 "(%s proowner) AS rolname, "
+                                                 "proowner, "
                                                  "proacl AS aggacl, "
                                                  "acldefault('f', proowner) AS 
acldefault "
                                                  "FROM pg_proc p "
                                                  "WHERE proisagg AND ("
                                                  "pronamespace != "
                                                  "(SELECT oid FROM 
pg_namespace "
-                                                 "WHERE nspname = 
'pg_catalog')",
-                                                 username_subquery);
+                                                 "WHERE nspname = 
'pg_catalog')");
                if (dopt->binary_upgrade)
                        appendPQExpBufferStr(query,
                                                                 " OR 
EXISTS(SELECT 1 FROM pg_depend WHERE "
@@ -6683,15 +6639,14 @@ getAggregates(Archive *fout, int *numAggs)
                appendPQExpBuffer(query, "SELECT tableoid, oid, proname AS 
aggname, "
                                                  "pronamespace AS 
aggnamespace, "
                                                  "pronargs, proargtypes, "
-                                                 "(%s proowner) AS rolname, "
+                                                 "proowner, "
                                                  "proacl AS aggacl, "
                                                  "NULL AS acldefault "
                                                  "FROM pg_proc p "
                                                  "WHERE proisagg AND ("
                                                  "pronamespace != "
                                                  "(SELECT oid FROM 
pg_namespace "
-                                                 "WHERE nspname = 
'pg_catalog')",
-                                                 username_subquery);
+                                                 "WHERE nspname = 
'pg_catalog')");
                if (dopt->binary_upgrade && fout->remoteVersion >= 90100)
                        appendPQExpBufferStr(query,
                                                                 " OR 
EXISTS(SELECT 1 FROM pg_depend WHERE "
@@ -6715,7 +6670,7 @@ getAggregates(Archive *fout, int *numAggs)
        i_aggnamespace = PQfnumber(res, "aggnamespace");
        i_pronargs = PQfnumber(res, "pronargs");
        i_proargtypes = PQfnumber(res, "proargtypes");
-       i_rolname = PQfnumber(res, "rolname");
+       i_proowner = PQfnumber(res, "proowner");
        i_aggacl = PQfnumber(res, "aggacl");
        i_acldefault = PQfnumber(res, "acldefault");
 
@@ -6732,10 +6687,7 @@ getAggregates(Archive *fout, int *numAggs)
                agginfo[i].aggfn.dacl.acldefault = pg_strdup(PQgetvalue(res, i, 
i_acldefault));
                agginfo[i].aggfn.dacl.privtype = 0;
                agginfo[i].aggfn.dacl.initprivs = NULL;
-               agginfo[i].aggfn.rolname = pg_strdup(PQgetvalue(res, i, 
i_rolname));
-               if (strlen(agginfo[i].aggfn.rolname) == 0)
-                       pg_log_warning("owner of aggregate function \"%s\" 
appears to be invalid",
-                                                  agginfo[i].aggfn.dobj.name);
+               agginfo[i].aggfn.rolname = getRoleName(PQgetvalue(res, i, 
i_proowner));
                agginfo[i].aggfn.lang = InvalidOid; /* not currently 
interesting */
                agginfo[i].aggfn.prorettype = InvalidOid;       /* not saved */
                agginfo[i].aggfn.nargs = atoi(PQgetvalue(res, i, i_pronargs));
@@ -6783,7 +6735,7 @@ getExtProtocols(Archive *fout, int *numExtProtocols)
        int                     i_oid;
        int                     i_tableoid;
        int                     i_ptcname;
-       int                     i_rolname;
+       int                     i_ptcowner;
        int                     i_ptcacl;
        int                     i_acldefault;
        int                     i_ptctrusted;
@@ -6800,11 +6752,10 @@ getExtProtocols(Archive *fout, int *numExtProtocols)
                                                                 "ptcreadfn as 
ptcreadoid, "
                                                                 "ptcwritefn as 
ptcwriteoid, "
                                                                 
"ptcvalidatorfn as ptcvaloid, "
-                                                                "(%s ptcowner) 
as rolname, "
+                                                                "ptcowner, "
                                                                 "ptctrusted, 
ptcacl, "
                                                                 
"acldefault('E', ptcowner) AS acldefault "
-                                                                "FROM 
pg_extprotocol ", 
-                                                                
username_subquery);
+                                                                "FROM 
pg_extprotocol ");
        }
        else
        {
@@ -6814,11 +6765,10 @@ getExtProtocols(Archive *fout, int *numExtProtocols)
                                                                 "ptcreadfn as 
ptcreadoid, "
                                                                 "ptcwritefn as 
ptcwriteoid, "
                                                                 
"ptcvalidatorfn as ptcvaloid, "
-                                                                "(%s ptcowner) 
as rolname, "
+                                                                "ptcowner, "
                                                                 "ptctrusted, 
ptcacl, "
                                                                 "NULL AS 
acldefault "
-                                                                "FROM 
pg_extprotocol ", 
-                                                                
username_subquery);
+                                                                "FROM 
pg_extprotocol ");
        }
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
@@ -6831,7 +6781,7 @@ getExtProtocols(Archive *fout, int *numExtProtocols)
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
        i_ptcname = PQfnumber(res, "ptcname");
-       i_rolname = PQfnumber(res, "rolname");
+       i_ptcowner = PQfnumber(res, "ptcowner");
        i_ptcacl = PQfnumber(res, "ptcacl");
        i_acldefault = PQfnumber(res, "acldefault");
        i_ptctrusted = PQfnumber(res, "ptctrusted");
@@ -6847,10 +6797,7 @@ getExtProtocols(Archive *fout, int *numExtProtocols)
                AssignDumpId(&ptcinfo[i].dobj);
                ptcinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_ptcname));
                ptcinfo[i].dobj.namespace = NULL;
-               ptcinfo[i].ptcowner = pg_strdup(PQgetvalue(res, i, i_rolname));
-               if (strlen(ptcinfo[i].ptcowner) == 0)
-                       pg_log_warning("owner of external protocol \"%s\" 
appears to be invalid",
-                                                  ptcinfo[i].dobj.name);
+               ptcinfo[i].rolname = getRoleName(PQgetvalue(res, i,  
i_ptcowner));
 
                if (PQgetisnull(res, i, i_ptcreadid))
                        ptcinfo[i].ptcreadid = InvalidOid;
@@ -6910,7 +6857,7 @@ getFuncs(Archive *fout, int *numFuncs)
        int                     i_oid;
        int                     i_proname;
        int                     i_pronamespace;
-       int                     i_rolname;
+       int                     i_proowner;
        int                     i_prolang;
        int                     i_pronargs;
        int                     i_proargtypes;
@@ -6953,7 +6900,7 @@ getFuncs(Archive *fout, int *numFuncs)
                                                  "p.proacl, "
                                                  "acldefault('f', p.proowner) 
AS acldefault, "
                                                  "p.pronamespace, "
-                                                 "(%s p.proowner) AS rolname "
+                                                 "p.proowner "
                                                  "FROM pg_proc p "
                                                  "LEFT JOIN pg_init_privs pip 
ON "
                                                  "(p.oid = pip.objoid "
@@ -6974,7 +6921,6 @@ getFuncs(Archive *fout, int *numFuncs)
                                                  "\n  WHERE pg_transform.oid > 
%u AND "
                                                  "\n  (p.oid = 
pg_transform.trffromsql"
                                                  "\n  OR p.oid = 
pg_transform.trftosql))",
-                                                 username_subquery,
                                                  not_agg_check,
                                                  g_last_builtin_oid,
                                                  g_last_builtin_oid);
@@ -7001,11 +6947,10 @@ getFuncs(Archive *fout, int *numFuncs)
                                                  "pronargs, proargtypes, 
prorettype, proacl, "
                                                  "%s AS acldefault, "
                                                  "pronamespace, "
-                                                 "(%s proowner) AS rolname "
+                                                 "proowner "
                                                  "FROM pg_proc p "
                                                  "WHERE NOT proisagg",
-                                                 acldefault_call,
-                                                 username_subquery);
+                                                 acldefault_call);
                if (fout->remoteVersion >= 90200)
                        appendPQExpBufferStr(query,
                                                                 "\n  AND NOT 
EXISTS (SELECT 1 FROM pg_depend "
@@ -7058,7 +7003,7 @@ getFuncs(Archive *fout, int *numFuncs)
        i_oid = PQfnumber(res, "oid");
        i_proname = PQfnumber(res, "proname");
        i_pronamespace = PQfnumber(res, "pronamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_proowner = PQfnumber(res, "proowner");
        i_prolang = PQfnumber(res, "prolang");
        i_pronargs = PQfnumber(res, "pronargs");
        i_proargtypes = PQfnumber(res, "proargtypes");
@@ -7079,7 +7024,7 @@ getFuncs(Archive *fout, int *numFuncs)
                finfo[i].dacl.acldefault = pg_strdup(PQgetvalue(res, i, 
i_acldefault));
                finfo[i].dacl.privtype = 0;
                finfo[i].dacl.initprivs = NULL;
-               finfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               finfo[i].rolname = getRoleName(PQgetvalue(res, i, i_proowner));
                finfo[i].lang = atooid(PQgetvalue(res, i, i_prolang));
                finfo[i].prorettype = atooid(PQgetvalue(res, i, i_prorettype));
                finfo[i].nargs = atoi(PQgetvalue(res, i, i_pronargs));
@@ -7099,10 +7044,6 @@ getFuncs(Archive *fout, int *numFuncs)
                /* Mark whether function has an ACL */
                if (!PQgetisnull(res, i, i_proacl))
                        finfo[i].dobj.components |= DUMP_COMPONENT_ACL;
-
-               if (strlen(finfo[i].rolname) == 0)
-                       pg_log_warning("owner of function \"%s\" appears to be 
invalid",
-                                                  finfo[i].dobj.name);
        }
 
        PQclear(res);
@@ -7135,7 +7076,7 @@ getTables(Archive *fout, int *numTables)
        int                     i_relnamespace;
        int                     i_relkind;
        int                     i_reltype;
-       int                     i_rolname;
+       int                     i_relowner;
        int                     i_relchecks;
        int                     i_relhastriggers;
        int                     i_relhasindex;
@@ -7197,15 +7138,14 @@ getTables(Archive *fout, int *numTables)
        appendPQExpBuffer(query,
                                          "SELECT c.tableoid, c.oid, c.relname, 
"
                                          "c.relnamespace, c.relkind, 
c.reltype, "
-                                         "(%s c.relowner) AS rolname, "
+                                         "c.relowner, "
                                          "c.relchecks, "
                                          "c.relhasindex, c.relhasrules, 
c.relpages, "
                                          "d.refobjid AS owning_tab, "
                                          "d.refobjsubid AS owning_col, "
                                          "tsp.spcname AS reltablespace, "
                                                "c.relfrozenxid, 
tc.relfrozenxid AS tfrozenxid, "
-                                               "tc.oid AS toid, ",
-                                         username_subquery);
+                                               "tc.oid AS toid, ");
 
        if (fout->remoteVersion >= 90600)
                appendPQExpBufferStr(query,
@@ -7451,7 +7391,7 @@ getTables(Archive *fout, int *numTables)
        i_relnamespace = PQfnumber(res, "relnamespace");
        i_relkind = PQfnumber(res, "relkind");
        i_reltype = PQfnumber(res, "reltype");
-       i_rolname = PQfnumber(res, "rolname");
+       i_relowner = PQfnumber(res, "relowner");
        i_relchecks = PQfnumber(res, "relchecks");
        i_relhasindex = PQfnumber(res, "relhasindex");
        i_relhasrules = PQfnumber(res, "relhasrules");
@@ -7522,7 +7462,7 @@ getTables(Archive *fout, int *numTables)
                tblinfo[i].dacl.initprivs = NULL;
                tblinfo[i].relkind = *(PQgetvalue(res, i, i_relkind));
                tblinfo[i].reltype = atooid(PQgetvalue(res, i, i_reltype));
-               tblinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               tblinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_relowner));
                tblinfo[i].ncheck = atoi(PQgetvalue(res, i, i_relchecks));
                tblinfo[i].hasindex = (strcmp(PQgetvalue(res, i, 
i_relhasindex), "t") == 0);
                tblinfo[i].hasrules = (strcmp(PQgetvalue(res, i, 
i_relhasrules), "t") == 0);
@@ -7677,11 +7617,6 @@ getTables(Archive *fout, int *numTables)
                                                
fmtQualifiedDumpable(&tblinfo[i]));
                        lockTableDumped = true;
                }
-
-               /* Emit notice if join for owner failed */
-               if (strlen(tblinfo[i].rolname) == 0)
-                       pg_log_warning("owner of table \"%s\" appears to be 
invalid",
-                                                  tblinfo[i].dobj.name);
        }
        /* Are there any tables to lock? */
        if (lockTableDumped)
@@ -8214,7 +8149,7 @@ getExtendedStatistics(Archive *fout)
        int                     i_oid;
        int                     i_stxname;
        int                     i_stxnamespace;
-       int                     i_rolname;
+       int                     i_stxowner;
        int                     i_stattarget;
        int                     i;
 
@@ -8226,14 +8161,13 @@ getExtendedStatistics(Archive *fout)
 
        if (fout->remoteVersion < 130000)
                appendPQExpBuffer(query, "SELECT tableoid, oid, stxname, "
-                                                 "stxnamespace, (%s stxowner) 
AS rolname, (-1) AS stxstattarget "
-                                                 "FROM 
pg_catalog.pg_statistic_ext",
-                                                 username_subquery);
+                                       "stxnamespace, stxowner, (-1) AS 
stxstattarget "
+                                       "FROM pg_catalog.pg_statistic_ext");
        else
                appendPQExpBuffer(query, "SELECT tableoid, oid, stxname, "
-                                                 "stxnamespace, (%s stxowner) 
AS rolname, stxstattarget "
-                                                 "FROM 
pg_catalog.pg_statistic_ext",
-                                                 username_subquery);
+                                       "stxnamespace, stxowner, stxstattarget "
+                                       "FROM pg_catalog.pg_statistic_ext");
+       
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -8243,7 +8177,7 @@ getExtendedStatistics(Archive *fout)
        i_oid = PQfnumber(res, "oid");
        i_stxname = PQfnumber(res, "stxname");
        i_stxnamespace = PQfnumber(res, "stxnamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_stxowner = PQfnumber(res, "stxowner");
        i_stattarget = PQfnumber(res, "stxstattarget");
 
        statsextinfo = (StatsExtInfo *) pg_malloc(ntups * sizeof(StatsExtInfo));
@@ -8257,7 +8191,7 @@ getExtendedStatistics(Archive *fout)
                statsextinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, 
i_stxname));
                statsextinfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_stxnamespace)));
-               statsextinfo[i].rolname = pg_strdup(PQgetvalue(res, i, 
i_rolname));
+               statsextinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_stxowner));
                statsextinfo[i].stattarget = atoi(PQgetvalue(res, i, 
i_stattarget));
 
                /* Decide whether we want to dump it */
@@ -8973,14 +8907,13 @@ getEventTriggers(Archive *fout, int *numEventTriggers)
 
        appendPQExpBuffer(query,
                                          "SELECT e.tableoid, e.oid, evtname, 
evtenabled, "
-                                         "evtevent, (%s evtowner) AS evtowner, 
"
+                                         "evtevent, evtowner, "
                                          "array_to_string(array("
                                          "select quote_literal(x) "
                                          " from unnest(evttags) as t(x)), ', 
') as evttags, "
                                          "e.evtfoid::regproc as evtfname "
                                          "FROM pg_event_trigger e "
-                                         "ORDER BY e.oid",
-                                         username_subquery);
+                                         "ORDER BY e.oid");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -9008,7 +8941,7 @@ getEventTriggers(Archive *fout, int *numEventTriggers)
                evtinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_evtname));
                evtinfo[i].evtname = pg_strdup(PQgetvalue(res, i, i_evtname));
                evtinfo[i].evtevent = pg_strdup(PQgetvalue(res, i, i_evtevent));
-               evtinfo[i].evtowner = pg_strdup(PQgetvalue(res, i, i_evtowner));
+               evtinfo[i].evtowner = getRoleName(PQgetvalue(res, i, 
i_evtowner));
                evtinfo[i].evttags = pg_strdup(PQgetvalue(res, i, i_evttags));
                evtinfo[i].evtfname = pg_strdup(PQgetvalue(res, i, i_evtfname));
                evtinfo[i].evtenabled = *(PQgetvalue(res, i, i_evtenabled));
@@ -9065,11 +8998,10 @@ getProcLangs(Archive *fout, int *numProcLangs)
                                                  "laninline, lanvalidator, "
                                                  "lanacl, "
                                                  "acldefault('l', lanowner) AS 
acldefault, "
-                                                 "(%s lanowner) AS lanowner "
+                                                 "lanowner "
                                                  "FROM pg_language "
                                                  "WHERE lanispl "
-                                                 "ORDER BY oid",
-                                                 username_subquery);
+                                                 "ORDER BY oid");
        }
        else if (fout->remoteVersion >= 90000)
        {
@@ -9078,11 +9010,10 @@ getProcLangs(Archive *fout, int *numProcLangs)
                                                  "lanname, lanpltrusted, 
lanplcallfoid, "
                                                  "laninline, lanvalidator, "
                                                  "lanacl, NULL AS acldefault, "
-                                                 "(%s lanowner) AS lanowner "
+                                                 "lanowner "
                                                  "FROM pg_language "
                                                  "WHERE lanispl "
-                                                 "ORDER BY oid",
-                                                 username_subquery);
+                                                 "ORDER BY oid");
        }
        else /* GPDB5 */
        {
@@ -9093,11 +9024,10 @@ getProcLangs(Archive *fout, int *numProcLangs)
                                                  "laninline, lanvalidator, 
lanacl, "
                                                  "0 AS laninline, 
lanvalidator, lanacl, "
                                                  "NULL AS acldefault, "
-                                                 "(%s lanowner) AS lanowner "
+                                                 "lanowner "
                                                  "FROM pg_language "
                                                  "WHERE lanispl "
-                                                 "ORDER BY oid",
-                                                 username_subquery);
+                                                 "ORDER BY oid");
        }
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
@@ -9135,7 +9065,7 @@ getProcLangs(Archive *fout, int *numProcLangs)
                planginfo[i].lanplcallfoid = atooid(PQgetvalue(res, i, 
i_lanplcallfoid));
                planginfo[i].laninline = atooid(PQgetvalue(res, i, 
i_laninline));
                planginfo[i].lanvalidator = atooid(PQgetvalue(res, i, 
i_lanvalidator));
-               planginfo[i].lanowner = pg_strdup(PQgetvalue(res, i, 
i_lanowner));
+               planginfo[i].lanowner = getRoleName(PQgetvalue(res, i, 
i_lanowner));
 
                /* Decide whether we want to dump it */
                selectDumpableProcLang(&(planginfo[i]), fout);
@@ -10108,7 +10038,7 @@ getTSDictionaries(Archive *fout, int *numTSDicts)
        int                     i_oid;
        int                     i_dictname;
        int                     i_dictnamespace;
-       int                     i_rolname;
+       int                     i_dictowner;
        int                     i_dicttemplate;
        int                     i_dictinitoption;
 
@@ -10122,10 +10052,9 @@ getTSDictionaries(Archive *fout, int *numTSDicts)
        query = createPQExpBuffer();
 
        appendPQExpBuffer(query, "SELECT tableoid, oid, dictname, "
-                                         "dictnamespace, (%s dictowner) AS 
rolname, "
+                                         "dictnamespace, dictowner, "
                                          "dicttemplate, dictinitoption "
-                                         "FROM pg_ts_dict",
-                                         username_subquery);
+                                         "FROM pg_ts_dict");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -10138,7 +10067,7 @@ getTSDictionaries(Archive *fout, int *numTSDicts)
        i_oid = PQfnumber(res, "oid");
        i_dictname = PQfnumber(res, "dictname");
        i_dictnamespace = PQfnumber(res, "dictnamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_dictowner = PQfnumber(res, "dictowner");
        i_dictinitoption = PQfnumber(res, "dictinitoption");
        i_dicttemplate = PQfnumber(res, "dicttemplate");
 
@@ -10151,7 +10080,7 @@ getTSDictionaries(Archive *fout, int *numTSDicts)
                dictinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, 
i_dictname));
                dictinfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_dictnamespace)));
-               dictinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               dictinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_dictowner));
                dictinfo[i].dicttemplate = atooid(PQgetvalue(res, i, 
i_dicttemplate));
                if (PQgetisnull(res, i, i_dictinitoption))
                        dictinfo[i].dictinitoption = NULL;
@@ -10260,7 +10189,7 @@ getTSConfigurations(Archive *fout, int *numTSConfigs)
        int                     i_oid;
        int                     i_cfgname;
        int                     i_cfgnamespace;
-       int                     i_rolname;
+       int                     i_cfgowner;
        int                     i_cfgparser;
 
        /* Before 8.3, there is no built-in text search support */
@@ -10273,9 +10202,8 @@ getTSConfigurations(Archive *fout, int *numTSConfigs)
        query = createPQExpBuffer();
 
        appendPQExpBuffer(query, "SELECT tableoid, oid, cfgname, "
-                                         "cfgnamespace, (%s cfgowner) AS 
rolname, cfgparser "
-                                         "FROM pg_ts_config",
-                                         username_subquery);
+                                         "cfgnamespace, cfgowner, cfgparser "
+                                         "FROM pg_ts_config");
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
@@ -10288,7 +10216,7 @@ getTSConfigurations(Archive *fout, int *numTSConfigs)
        i_oid = PQfnumber(res, "oid");
        i_cfgname = PQfnumber(res, "cfgname");
        i_cfgnamespace = PQfnumber(res, "cfgnamespace");
-       i_rolname = PQfnumber(res, "rolname");
+       i_cfgowner = PQfnumber(res, "cfgowner");
        i_cfgparser = PQfnumber(res, "cfgparser");
 
        for (i = 0; i < ntups; i++)
@@ -10300,7 +10228,7 @@ getTSConfigurations(Archive *fout, int *numTSConfigs)
                cfginfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_cfgname));
                cfginfo[i].dobj.namespace =
                        findNamespace(atooid(PQgetvalue(res, i, 
i_cfgnamespace)));
-               cfginfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               cfginfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_cfgowner));
                cfginfo[i].cfgparser = atooid(PQgetvalue(res, i, i_cfgparser));
 
                /* Decide whether we want to dump it */
@@ -10332,7 +10260,7 @@ getForeignDataWrappers(Archive *fout, int 
*numForeignDataWrappers)
        int                     i_tableoid;
        int                     i_oid;
        int                     i_fdwname;
-       int                     i_rolname;
+       int                     i_fdwowner;
        int                     i_fdwhandler;
        int                     i_fdwvalidator;
        int                     i_fdwacl;
@@ -10351,7 +10279,7 @@ getForeignDataWrappers(Archive *fout, int 
*numForeignDataWrappers)
        if (fout->remoteVersion >= 90200)
        {
                appendPQExpBuffer(query, "SELECT tableoid, oid, fdwname, "
-                                                 "(%s fdwowner) AS rolname, "
+                                                 "fdwowner, "
                                                  
"fdwhandler::pg_catalog.regproc, "
                                                  
"fdwvalidator::pg_catalog.regproc, "
                                                  "fdwacl, "
@@ -10362,13 +10290,12 @@ getForeignDataWrappers(Archive *fout, int 
*numForeignDataWrappers)
                                                  "FROM 
pg_options_to_table(fdwoptions) "
                                                  "ORDER BY option_name"
                                                  "), E',\n    ') AS fdwoptions 
"
-                                                 "FROM 
pg_foreign_data_wrapper",
-                                                 username_subquery);
+                                                 "FROM 
pg_foreign_data_wrapper");
        }
        else if (fout->remoteVersion >= 90100)
        {
                appendPQExpBuffer(query, "SELECT tableoid, oid, fdwname, "
-                                                 "(%s fdwowner) AS rolname, "
+                                                 "fdwowner, "
                                                  
"fdwhandler::pg_catalog.regproc, "
                                                  
"fdwvalidator::pg_catalog.regproc, fdwacl, "
                                                  "NULL AS acldefault, "
@@ -10378,13 +10305,12 @@ getForeignDataWrappers(Archive *fout, int 
*numForeignDataWrappers)
                                                  "FROM 
pg_options_to_table(fdwoptions) "
                                                  "ORDER BY option_name"
                                                  "), E',\n    ') AS fdwoptions 
"
-                                                 "FROM 
pg_foreign_data_wrapper",
-                                                 username_subquery);
+                                                 "FROM 
pg_foreign_data_wrapper");
        }
        else
        {
                appendPQExpBuffer(query, "SELECT tableoid, oid, fdwname, "
-                                                 "(%s fdwowner) AS rolname, "
+                                                 "fdwowner, "
                                                  "'-' AS fdwhandler, "
                                                  
"fdwvalidator::pg_catalog.regproc, fdwacl, "
                                                  "NULL AS acldefault, "
@@ -10394,8 +10320,7 @@ getForeignDataWrappers(Archive *fout, int 
*numForeignDataWrappers)
                                                  "FROM 
pg_options_to_table(fdwoptions) "
                                                  "ORDER BY option_name"
                                                  "), E',\n    ') AS fdwoptions 
"
-                                                 "FROM 
pg_foreign_data_wrapper",
-                                                 username_subquery);
+                                                 "FROM 
pg_foreign_data_wrapper");
        }
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
@@ -10408,7 +10333,7 @@ getForeignDataWrappers(Archive *fout, int 
*numForeignDataWrappers)
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
        i_fdwname = PQfnumber(res, "fdwname");
-       i_rolname = PQfnumber(res, "rolname");
+       i_fdwowner = PQfnumber(res, "fdwowner");
        i_fdwhandler = PQfnumber(res, "fdwhandler");
        i_fdwvalidator = PQfnumber(res, "fdwvalidator");
        i_fdwacl = PQfnumber(res, "fdwacl");
@@ -10427,7 +10352,7 @@ getForeignDataWrappers(Archive *fout, int 
*numForeignDataWrappers)
                fdwinfo[i].dacl.acldefault = pg_strdup(PQgetvalue(res, i, 
i_acldefault));
                fdwinfo[i].dacl.privtype = 0;
                fdwinfo[i].dacl.initprivs = NULL;
-               fdwinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               fdwinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_fdwowner));
                fdwinfo[i].fdwhandler = pg_strdup(PQgetvalue(res, i, 
i_fdwhandler));
                fdwinfo[i].fdwvalidator = pg_strdup(PQgetvalue(res, i, 
i_fdwvalidator));
                fdwinfo[i].fdwoptions = pg_strdup(PQgetvalue(res, i, 
i_fdwoptions));
@@ -10469,7 +10394,7 @@ getForeignServers(Archive *fout, int *numForeignServers)
        int                     i_tableoid;
        int                     i_oid;
        int                     i_srvname;
-       int                     i_rolname;
+       int                     i_srvowner;
        int                     i_srvfdw;
        int                     i_srvtype;
        int                     i_srvversion;
@@ -10489,7 +10414,7 @@ getForeignServers(Archive *fout, int *numForeignServers)
        if (fout->remoteVersion >= 90200)
        {
                appendPQExpBuffer(query, "SELECT tableoid, oid, srvname, "
-                                                 "(%s srvowner) AS rolname, "
+                                                 "srvowner, "
                                                  "srvfdw, srvtype, srvversion, 
srvacl, "
                                                  "acldefault('S', srvowner) AS 
acldefault, "
                                                  "array_to_string(ARRAY("
@@ -10498,13 +10423,12 @@ getForeignServers(Archive *fout, int 
*numForeignServers)
                                                  "FROM 
pg_options_to_table(srvoptions) "
                                                  "ORDER BY option_name"
                                                  "), E',\n    ') AS srvoptions 
"
-                                                 "FROM pg_foreign_server",
-                                                 username_subquery);
+                                                 "FROM pg_foreign_server");
        }
        else
        {
                appendPQExpBuffer(query, "SELECT tableoid, oid, srvname, "
-                                                 "(%s srvowner) AS rolname, "
+                                                 "srvowner, "
                                                  "srvfdw, srvtype, srvversion, 
srvacl, "
                                                  "NULL AS acldefault, "
                                                  "array_to_string(ARRAY("
@@ -10513,8 +10437,7 @@ getForeignServers(Archive *fout, int *numForeignServers)
                                                  "FROM 
pg_options_to_table(srvoptions) "
                                                  "ORDER BY option_name"
                                                  "), E',\n    ') AS srvoptions 
"
-                                                 "FROM pg_foreign_server",
-                                                 username_subquery);
+                                                 "FROM pg_foreign_server");
        }
 
        res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
@@ -10527,7 +10450,7 @@ getForeignServers(Archive *fout, int *numForeignServers)
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
        i_srvname = PQfnumber(res, "srvname");
-       i_rolname = PQfnumber(res, "rolname");
+       i_srvowner = PQfnumber(res, "srvowner");
        i_srvfdw = PQfnumber(res, "srvfdw");
        i_srvtype = PQfnumber(res, "srvtype");
        i_srvversion = PQfnumber(res, "srvversion");
@@ -10547,7 +10470,7 @@ getForeignServers(Archive *fout, int *numForeignServers)
                srvinfo[i].dacl.acldefault = pg_strdup(PQgetvalue(res, i, 
i_acldefault));
                srvinfo[i].dacl.privtype = 0;
                srvinfo[i].dacl.initprivs = NULL;
-               srvinfo[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname));
+               srvinfo[i].rolname = getRoleName(PQgetvalue(res, i, 
i_srvowner));
                srvinfo[i].srvfdw = atooid(PQgetvalue(res, i, i_srvfdw));
                srvinfo[i].srvtype = pg_strdup(PQgetvalue(res, i, i_srvtype));
                srvinfo[i].srvversion = pg_strdup(PQgetvalue(res, i, 
i_srvversion));
@@ -10609,11 +10532,10 @@ getDefaultACLs(Archive *fout, int *numDefaultACLs)
 
        appendPQExpBuffer(query,
                                          "SELECT oid, tableoid, "
-                                         "(%s defaclrole) AS defaclrole, "
+                                         "defaclrole, "
                                          "defaclnamespace, "
                                          "defaclobjtype, "
-                                         "defaclacl, ",
-                                         username_subquery);
+                                         "defaclacl, ");
 
        if (fout->remoteVersion >= 90200)
        {
@@ -10678,7 +10600,7 @@ getDefaultACLs(Archive *fout, int *numDefaultACLs)
                daclinfo[i].dacl.acldefault = pg_strdup(PQgetvalue(res, i, 
i_acldefault));
                daclinfo[i].dacl.privtype = 0;
                daclinfo[i].dacl.initprivs = NULL;
-               daclinfo[i].defaclrole = pg_strdup(PQgetvalue(res, i, 
i_defaclrole));
+               daclinfo[i].defaclrole = getRoleName(PQgetvalue(res, i, 
i_defaclrole));
                daclinfo[i].defaclobjtype = *(PQgetvalue(res, i, 
i_defaclobjtype));
 
                /* Default ACLs are ACLs, of course */
@@ -10695,6 +10617,71 @@ getDefaultACLs(Archive *fout, int *numDefaultACLs)
        return daclinfo;
 }
 
+/*
+ * getRoleName -- look up the name of a role, given its OID
+ *
+ * In current usage, we don't expect failures, so error out for a bad OID.
+ */
+static const char *
+getRoleName(const char *roleoid_str)
+{
+       Oid                     roleoid = atooid(roleoid_str);
+
+       /*
+        * Do binary search to find the appropriate item.
+        */
+       if (nrolenames > 0)
+       {
+               RoleNameItem *low = &rolenames[0];
+               RoleNameItem *high = &rolenames[nrolenames - 1];
+
+               while (low <= high)
+               {
+                       RoleNameItem *middle = low + (high - low) / 2;
+
+                       if (roleoid < middle->roleoid)
+                               high = middle - 1;
+                       else if (roleoid > middle->roleoid)
+                               low = middle + 1;
+                       else
+                               return middle->rolename;        /* found a 
match */
+               }
+       }
+
+       fatal("role with OID %u does not exist", roleoid);
+       return NULL;                            /* keep compiler quiet */
+}
+
+/*
+ * collectRoleNames --
+ *
+ * Construct a table of all known roles.
+ * The table is sorted by OID for speed in lookup.
+ */
+static void
+collectRoleNames(Archive *fout)
+{
+       PGresult   *res;
+       const char *query;
+       int                     i;
+
+       query = "SELECT oid, rolname FROM pg_catalog.pg_roles ORDER BY 1";
+
+       res = ExecuteSqlQuery(fout, query, PGRES_TUPLES_OK);
+
+       nrolenames = PQntuples(res);
+
+       rolenames = (RoleNameItem *) pg_malloc(nrolenames * 
sizeof(RoleNameItem));
+
+       for (i = 0; i < nrolenames; i++)
+       {
+               rolenames[i].roleoid = atooid(PQgetvalue(res, i, 0));
+               rolenames[i].rolename = pg_strdup(PQgetvalue(res, i, 1));
+       }
+
+       PQclear(res);
+}
+
 /*
  * getAdditionalACLs
  *
@@ -15890,7 +15877,7 @@ dumpExtProtocol(Archive *fout, const ExtProtInfo 
*ptcinfo)
 
        ArchiveEntry(fout, ptcinfo->dobj.catId, ptcinfo->dobj.dumpId,
                                 ARCHIVE_OPTS(.tag = ptcinfo->dobj.name,
-                                                         .owner = 
ptcinfo->ptcowner,
+                                                         .owner = 
ptcinfo->rolname,
                                                          .description = 
"PROTOCOL",
                                                          .section = 
SECTION_PRE_DATA,
                                                          .createStmt = q->data,
@@ -15903,7 +15890,7 @@ dumpExtProtocol(Archive *fout, const ExtProtInfo 
*ptcinfo)
        dumpACL(fout, ptcinfo->dobj.dumpId, InvalidDumpId,
                        "PROTOCOL",
                        namecopy, NULL,
-                       NULL, ptcinfo->ptcowner, &ptcinfo->dacl);
+                       NULL, ptcinfo->rolname, &ptcinfo->dacl);
        free(namecopy);
 
        destroyPQExpBuffer(q);
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 1badb50b482..dc6791deb49 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -180,7 +180,8 @@ typedef struct _namespaceInfo
 {
        DumpableObject dobj;
        DumpableAcl dacl;
-       char       *rolname;            /* name of owner, or empty string */
+       Oid                     nspowner;               /* OID of owner */
+       const char *rolname;            /* name of owner */
 } NamespaceInfo;
 
 typedef struct _extensionInfo
@@ -204,7 +205,7 @@ typedef struct _typeInfo
         * schema-qualified too.
         */
        char            *ftypname;
-       char            *rolname;               /* name of owner, or empty 
string */
+       const char      *rolname;               /* name of owner, or empty 
string */
        char            *typacl;
        char            *rtypacl;
        char            *inittypacl;
@@ -236,7 +237,7 @@ typedef struct _funcInfo
 {
        DumpableObject dobj;
        DumpableAcl dacl;
-       char       *rolname;            /* name of owner, or empty string */
+       const char *rolname;
        Oid                     lang;
        int                     nargs;
        Oid                *argtypes;
@@ -256,7 +257,7 @@ typedef struct _ptcInfo
        DumpableAcl dacl;
        char       *ptcreadfn;
        char       *ptcwritefn;
-       char       *ptcowner;
+       const char *rolname;
        char       *ptcacl;
        bool       ptctrusted;
        Oid                ptcreadid;
@@ -267,7 +268,7 @@ typedef struct _ptcInfo
 typedef struct _oprInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
        char            oprkind;
        Oid                     oprcode;
 } OprInfo;
@@ -282,25 +283,25 @@ typedef struct _accessMethodInfo
 typedef struct _opclassInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
 } OpclassInfo;
 
 typedef struct _opfamilyInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
 } OpfamilyInfo;
 
 typedef struct _collInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
 } CollInfo;
 
 typedef struct _convInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
 } ConvInfo;
 
 typedef struct _tableInfo
@@ -310,7 +311,7 @@ typedef struct _tableInfo
         */
        DumpableObject dobj;
        DumpableAcl dacl;
-       char       *rolname;            /* name of owner, or empty string */
+       const char *rolname;
        char            relkind;
        char            relstorage;
        char            relpersistence; /* relation persistence */
@@ -452,7 +453,7 @@ typedef struct _indexAttachInfo
 typedef struct _statsExtInfo
 {
        DumpableObject dobj;
-       char       *rolname;            /* name of owner, or empty string */
+       const char  *rolname;           /* name of owner, or empty string */
        int                     stattarget;             /* statistics target */
 } StatsExtInfo;
 
@@ -491,7 +492,7 @@ typedef struct _evttriggerInfo
        DumpableObject dobj;
        char       *evtname;
        char       *evtevent;
-       char       *evtowner;
+       const char *evtowner;
        char       *evttags;
        char       *evtfname;
        char            evtenabled;
@@ -528,7 +529,7 @@ typedef struct _procLangInfo
        Oid                     lanplcallfoid;
        Oid                     laninline;
        Oid                     lanvalidator;
-       char       *lanowner;           /* name of owner, or empty string */
+       const char *lanowner;
 } ProcLangInfo;
 
 typedef struct _castInfo
@@ -570,7 +571,7 @@ typedef struct _prsInfo
 typedef struct _dictInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
        Oid                     dicttemplate;
        char       *dictinitoption;
 } TSDictInfo;
@@ -585,7 +586,7 @@ typedef struct _tmplInfo
 typedef struct _cfgInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
        Oid                     cfgparser;
 } TSConfigInfo;
 
@@ -593,7 +594,7 @@ typedef struct _fdwInfo
 {
        DumpableObject dobj;
        DumpableAcl dacl;
-       char       *rolname;
+       const char *rolname;
        char       *fdwhandler;
        char       *fdwvalidator;
        char       *fdwoptions;
@@ -603,7 +604,7 @@ typedef struct _foreignServerInfo
 {
        DumpableObject dobj;
        DumpableAcl dacl;
-       char       *rolname;
+       const char *rolname;
        Oid                     srvfdw;
        char       *srvtype;
        char       *srvversion;
@@ -614,7 +615,7 @@ typedef struct _defaultACLInfo
 {
        DumpableObject dobj;
        DumpableAcl dacl;
-       char       *defaclrole;
+       const char *defaclrole;
        char            defaclobjtype;
 } DefaultACLInfo;
 
@@ -622,7 +623,7 @@ typedef struct _blobInfo
 {
        DumpableObject dobj;
        DumpableAcl dacl;
-       char       *rolname;
+       const char *rolname;
 } BlobInfo;
 
 /*
@@ -649,7 +650,7 @@ typedef struct _policyInfo
 typedef struct _PublicationInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
        bool            puballtables;
        bool            pubinsert;
        bool            pubupdate;
@@ -675,7 +676,7 @@ typedef struct _PublicationRelInfo
 typedef struct _SubscriptionInfo
 {
        DumpableObject dobj;
-       char       *rolname;
+       const char *rolname;
        char       *subconninfo;
        char       *subslotname;
        char       *subbinary;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to