diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 7afdbf4d9d..ab657e5254 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -4600,6 +4600,7 @@ getSubscriptions(Archive *fout) int i_subtwophasestate; int i_subdisableonerr; int i_suborigin; + int i_subrunasowner; int i_subconninfo; int i_subslotname; int i_subsynccommit; @@ -4660,10 +4661,12 @@ getSubscriptions(Archive *fout) if (fout->remoteVersion >= 160000) appendPQExpBufferStr(query, " s.suborigin,\n" + " s.subrunasowner,\n" " s.subpasswordrequired\n"); else appendPQExpBuffer(query, " '%s' AS suborigin,\n" + " 't' AS subrunasowner,\n" " 't' AS subpasswordrequired\n", LOGICALREP_ORIGIN_ANY); @@ -4685,6 +4688,7 @@ getSubscriptions(Archive *fout) i_subname = PQfnumber(res, "subname"); i_subowner = PQfnumber(res, "subowner"); i_subconninfo = PQfnumber(res, "subconninfo"); + i_subrunasowner = PQfnumber(res, "subrunasowner"); i_subslotname = PQfnumber(res, "subslotname"); i_subsynccommit = PQfnumber(res, "subsynccommit"); i_subpublications = PQfnumber(res, "subpublications"); @@ -4707,6 +4711,7 @@ getSubscriptions(Archive *fout) subinfo[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_subname)); subinfo[i].rolname = getRoleName(PQgetvalue(res, i, i_subowner)); subinfo[i].subconninfo = pg_strdup(PQgetvalue(res, i, i_subconninfo)); + subinfo[i].subrunasowner = pg_strdup(PQgetvalue(res, i, i_subrunasowner)); if (PQgetisnull(res, i, i_subslotname)) subinfo[i].subslotname = NULL; else @@ -4810,6 +4815,9 @@ dumpSubscription(Archive *fout, const SubscriptionInfo *subinfo) if (strcmp(subinfo->subpasswordrequired, "t") != 0) appendPQExpBuffer(query, ", password_required = false"); + if (strcmp(subinfo->subrunasowner, "t") == 0) + appendPQExpBufferStr(query, ", run_as_owner = true"); + appendPQExpBufferStr(query, ");\n"); if (subinfo->dobj.dump & DUMP_COMPONENT_DEFINITION) diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index d8f27f187c..bcba4a1ef0 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -661,6 +661,7 @@ typedef struct _SubscriptionInfo DumpableObject dobj; const char *rolname; char *subconninfo; + char *subrunasowner; char *subslotname; char *subbinary; char *substream;