From 135af39876e0ce5a49dafc2f29de646ddb4f80f6 Mon Sep 17 00:00:00 2001
From: Felix Wu <felix.wu@aiven.io>
Date: Thu, 31 Mar 2022 17:30:28 -0700
Subject: [PATCH] catch setting role exception and output a warning instead of
 stop migration process

---
 aiven_db_migrate/migrate/pgmigrate.py | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/aiven_db_migrate/migrate/pgmigrate.py b/aiven_db_migrate/migrate/pgmigrate.py
index 4984b10..f4f0510 100644
--- a/aiven_db_migrate/migrate/pgmigrate.py
+++ b/aiven_db_migrate/migrate/pgmigrate.py
@@ -992,18 +992,20 @@ def _migrate_roles(self) -> Dict[str, PGRoleTask]:
                     message=err.diag.message_primary,
                 )
             else:
-                if role.rolconfig:
-                    for conf in role.rolconfig:
-                        key, value = conf.split("=", 1)
-                        self.log.info("Setting config for role %r: %s = %s", role.rolname, key, value)
-                        self.target.c(f'ALTER ROLE {role.safe_rolname} SET "{key}" = %s', args=(value, ), return_rows=0)
-                roles[role.rolname] = PGRoleTask(
-                    rolname=rolname,
-                    rolpassword=role.rolpassword,
-                    status=PGRoleStatus.created,
-                    message="role created",
-                )
-
+                try:
+                    if role.rolconfig:
+                        for conf in role.rolconfig:
+                            key, value = conf.split("=", 1)
+                            self.log.info("Setting config for role %r: %s = %s", role.rolname, key, value)
+                            self.target.c(f'ALTER ROLE {role.safe_rolname} SET "{key}" = %s', args=(value, ), return_rows=0)
+                    roles[role.rolname] = PGRoleTask(
+                        rolname=rolname,
+                        rolpassword=role.rolpassword,
+                        status=PGRoleStatus.created,
+                        message="role created",
+                    )
+                except psycopg2.ProgrammingError as err:
+                    self.log.warn(f'Setting config {role.rolname}: {key} = {value}. Error: {err}')
         return roles
 
     @staticmethod