From d75856b200e5ab707f36119b79b258b5e3baa7c7 Mon Sep 17 00:00:00 2001 From: Mahendra Singh Thalor Date: Mon, 31 Mar 2025 21:39:26 +0530 Subject: [PATCH] pg_restore: skip error for CRETE ROLE username --- --- --- src/bin/pg_dump/pg_restore.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index d8037da653f..4800527a2f3 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -542,8 +542,7 @@ main(int argc, char **argv) * Open global.dat file and execute/append all the global sql * commands. */ - n_errors = process_global_sql_commands(conn, inputFileSpec, - opts->filename); + n_errors = process_global_sql_commands(conn, inputFileSpec, opts->filename); if (conn) PQfinish(conn); @@ -1284,8 +1283,13 @@ process_global_sql_commands(PGconn *conn, const char *dumpdirpath, const char *o char global_file_path[MAXPGPATH]; PGresult *result; StringInfoData sqlstatement; + StringInfoData rolesqlstatement; FILE *pfile; int n_errors = 0; + bool check_role_cmd = true; + + /* Should have valid connection. */ + Assert(conn); snprintf(global_file_path, MAXPGPATH, "%s/global.dat", dumpdirpath); @@ -1308,9 +1312,26 @@ process_global_sql_commands(PGconn *conn, const char *dumpdirpath, const char *o /* Init sqlstatement to append commands. */ initStringInfo(&sqlstatement); + /* Preapre "CREATE ROLE username" command. */ + initStringInfo(&rolesqlstatement); + appendStringInfoString(&rolesqlstatement, "\n\n--\n-- Roles\n--\n\nCREATE ROLE "); + appendStringInfoString(&rolesqlstatement, PQuser(conn)); + appendStringInfoString(&rolesqlstatement, ";"); + /* Process file till EOF and execute sql statements. */ while (read_one_statement(&sqlstatement, pfile) != EOF) { + + /* + * If this command is for "CREATE ROLE username", then skip this as + * current user is already created. + */ + if (check_role_cmd && (strcmp(sqlstatement.data, rolesqlstatement.data) == 0)) + { + check_role_cmd = false; + continue; + } + pg_log_info("executing query: %s", sqlstatement.data); result = PQexec(conn, sqlstatement.data); -- 2.39.3