Error al crear Usuario desde Ci

Hola Richard, gracias por tu respuesta. al final modifique el código que puse en un principio, pero realizando los insert a mano. debido a que usando los metodos agregar_usuario y vincular_usuario me arrojaban error.

Con respecto a tus consultas.

te hago una consulta rápida, diferencia en la organización de la bd entre desarrollo y producción?.. todo en una misma base?, bases distintas?.
tanto en desarrollo y producción tienen la misma organización, y están en BD diferentes.
Otra cosa a mirar, permisos del usuario con el que la aplicacion se conecta a la bd... tiene acceso a todos los schemas/bases?
en ambos entornos estan con el usuario postgres.
Lo que no entiendo de este codigo es lo siguiente, tenes dos catch anidados para el mismo tipo de error... el interno estaria de mas, no te aborta la transaccion y permite que se continue ejecutando desde alli, con lo que va a mandar a sincronizar el datos_relacion.
Nose por que habre puesto 2 try cath anidados. pero ya elimine el try interno.

El codigo, que me funciono al final, y que mencione al principio es el siguiente, pero me quedo la duda de porque en un entorno me funciono y en el otro no.

function set_usuarios() {
        $bloq = toba::instancia()->es_usuario_bloqueado($this->s__usuario['documento']);
        if ($bloq) {
            toba::notificacion()->agregar('El usuario se encuentra bloqueado. 
 
				Contactese con la Subsecretaria de Recursos Humanos');
        }

        $this->dep('datos')->persistidor()->desactivar_transaccion();
        toba::db()->abrir_transaccion();
        try {
            $ins = co_inscripciones::existe_inscripcion($this->s__usuario['documento'], $this->s__usuario['id_convocatoria']);
            if (count($ins) > 0) {
                throw new toba_error('"<b>Ya existe un usuario en la convocatoria actual.</b>

                    Recupere su clave o 
                    Comuniquese con la Subsecretaria de Recursos Humanos"');
            } else {
                $usuario = $this->s__usuario;
                self::crear_usuario($usuario);
                $this->set_persona();
                EnviarEmail::enviar_usuario($this->s__usuario);
                $this->dep('datos')->sincronizar();
                $this->dep('datos')->resetear();
                toba::db()->cerrar_transaccion();
                $this->set_pantalla('pant_msj');
                $this->pantalla()->set_descripcion("<strong>Los datos se grabaron correctamente.
                	
Presione \"Volver\" para regresar a la pantalla de ingreso.</strong>");
            }
        } catch (toba_error $error) {
            //toba::instancia()->bloquear_usuario($this->s__usuario['documento']);
            toba::db()->abortar_transaccion();
            throw new toba_error($error->get_mensaje_log());
        }
    }
function crear_usuario($usuario) {
        try {
            $db_toba = toba_instancia::instancia()->get_db();
            $nombre = quote($usuario['apellido'] . ' ' . $usuario['nombre']);
            $username = quote(addslashes($usuario['documento']));
            $email = quote($usuario['email']);


            $algoritmo = 'bcrypt';
            $clave = encriptar_con_sal($usuario['clave'], $algoritmo);

            $sql = "INSERT INTO desarrollo.apex_usuario (usuario, nombre, clave,autentificacion,email) VALUES ($username, $nombre,'".$clave."','bcrypt',$email);";
            $db_toba->ejecutar($sql);
            $sql = "INSERT INTO desarrollo.apex_usuario_proyecto (proyecto, usuario_grupo_acc, usuario) VALUES ('dj_unlar','agente', $username);";
            $db_toba->ejecutar($sql);
        } catch (toba_error $error) {
            toba::notificacion()->agregar('error ' . $error->get_mensaje_log());
        }
    }