diff options
Diffstat (limited to 'src/bin/pg_dump/pg_dumpall.c')
-rw-r--r-- | src/bin/pg_dump/pg_dumpall.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index a87262e3335..7b40081678b 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -1384,7 +1384,10 @@ dumpUserConfig(PGconn *conn, const char *username) PQExpBuffer buf = createPQExpBuffer(); PGresult *res; - printfPQExpBuffer(buf, "SELECT unnest(setconfig) FROM pg_db_role_setting " + printfPQExpBuffer(buf, "SELECT unnest(setconfig)"); + if (server_version >= 160000) + appendPQExpBufferStr(buf, ", unnest(setuser)"); + appendPQExpBuffer(buf, " FROM pg_db_role_setting " "WHERE setdatabase = 0 AND setrole = " "(SELECT oid FROM %s WHERE rolname = ", role_catalog); @@ -1398,8 +1401,13 @@ dumpUserConfig(PGconn *conn, const char *username) for (int i = 0; i < PQntuples(res); i++) { + char *userset = NULL; + + if (server_version >= 160000) + userset = PQgetvalue(res, i, 1); + resetPQExpBuffer(buf); - makeAlterConfigCommand(conn, PQgetvalue(res, i, 0), + makeAlterConfigCommand(conn, PQgetvalue(res, i, 0), userset, "ROLE", username, NULL, NULL, buf); fprintf(OPF, "%s", buf->data); |