docs: def _role_update(name,
                   user=None,
                   host=None,
                   port=None,
                   maintenance_db=None,
                   password=None,
                   createdb=None,
                   typ_='role',
                   createroles=None,
                   inherit=None,
                   login=None,
                   connlimit=None,
                   encrypted=None,
                   superuser=None,
                   replication=None,
                   rolepassword=None,
                   valid_until=None,
                   groups=None,
                   runas=None):
      '''
      Updates a postgres role.
      '''
      role = role_get(name,
                      user=user,
                      host=host,
                      port=port,
                      maintenance_db=maintenance_db,
                      password=password,
                      runas=runas,
                      return_password=False)
  
      # check if user exists
      if not bool(role):
          log.info(
              '%s \'%s\' could not be found', typ_.capitalize(), name
          )
          return False
  
      sub_cmd = 'ALTER ROLE "{0}" WITH'.format(name)
      sub_cmd = '{0} {1}'.format(sub_cmd, _role_cmd_args(
          name,
          encrypted=encrypted,
          login=login,
          connlimit=connlimit,
          inherit=inherit,
          createdb=createdb,
          createroles=createroles,
          superuser=superuser,
          groups=groups,
          replication=replication,
          rolepassword=rolepassword,
          valid_until=valid_until,
          db_role=role
      ))
      ret = _psql_prepare_and_run(['-c', sub_cmd],
                                  runas=runas, host=host, user=user, port=port,
                                  maintenance_db=maintenance_db,
                                  password=password)
  
      return ret['retcode'] == 0