Problema con Tareas en Moodle: Error table mod_assignment already exists

Si actualizamos la versión de Moodle o la sección de plugins y recibimos el siguiente error:


Error de ejecución DDL sql


Error table mod_assignment already exists





Esto se produce porque el módulo de Tareas 2.2 de Moodle está dando error al actualizar normalmente a versiones inferiores a la 4.1.


A partir de la versión 4.2.x este módulo no viene incluido en el core de Moodle.





Hemos visto casos en los que el módulo "assignment" existe en la carpeta "mod" de Moodle y además también existen 3 tablas relacionadas con este módulo:


  • mdl_assignment
  • mdl_assignment_submissions
  • mdl_assignment_upgrade



Desconocemos por qué se produce este error en una actualización (concretamente al actualizar Moodle 4.011 a 4.1)


Parece ser un bug de Moodle que nos indica que el usuario de la base de datos no tiene permisos "CREATE TEMPORARY TABLES" lo cual no es cierto, porque el usuario sí los tiene.



Solución al error


Este error aparece tanto si actualizamos la versión de Moodle como si solo nos vamos a las actualizaciones de las páginas de plugins.


Para solucionar el problema, y puesto que Moodle está intentando crear estas 3 tablas que ya existen es hacer los siguientes pasos:


1) Visitamos la base de datos a través de PhpMyAdmin y hacemos un backup de esas 3 tablas solo:


  • mdl_assignment
  • mdl_assignment_submissions
  • mdl_assignment_upgrade


2) Al hacer la exportación de los datos, nos debemos asegurar que exportamos solo esas 3 tablas y que seleccionamos la opción:


Agregar sentencia DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER


Con esta opción nos aseguramos que vamos a exportar la estructura de las tablas y los datos que las contienen.


3) Una vez tengamos en nuestro ordenador el archivo SQL exportado y los datos asegurados, procedemos a eliminar esas 3 tablas de nuestra base de datos desde el mismo PhpMyAdmin.


4) Volvemos a la actualización de Moodle o a la actualización de plugins y de nuevo intentamos la actualización de la base de datos cuando Moodle nos pida actualizarla.


5) Ahora Moodle ya no mostrará el problema de las Tareas y nos dejará actualizar la base de datos.


6) Al hacer esto, Moodle nos ha dejado actualizar la base de datos y habrá creado las 3 tablas de nuevo pero sin datos, vacías.


7) Ahora tendremos que abrir el archivo .sql que bajamos a nuestro ordenador, lo abriremos y copiaremos los datos que teníamos en las 3 tablas antes de eliminarlas.


Estos datos comienzan por:


a) mdl_assignment:


INSERT INTO `mdl_assignment` (`id`, `course`, `name`, `intro`, `introformat`, `assignmenttype`, `resubmit`, `preventlate`, `emailteachers`, `var1`, `var2`, `var3`, `var4`, `var5`, `maxbytes`, `timedue`, `timeavailable`, `grade`, `timemodified`) VALUES

b) mdl_assignment_submissions:


INSERT INTO `mdl_assignment_submissions` (`id`, `assignment`, `userid`, `timecreated`, `timemodified`, `numfiles`, `data1`, `data2`, `grade`, `submissioncomment`, `format`, `teacher`, `timemarked`, `mailed`) VALUES


c) mdl_assignment_upgrade:


INSERT INTO `mdl_assignment_upgrade` (`id`, `oldcmid`, `oldinstance`, `newcmid`, `newinstance`, `timecreated`) VALUES


y seguirán por las líneas consiguientes que compongan los datos de nuestras tablas.


OJO: tendremos que copiar todos los datos hasta el final de la sentencia que acaba en un punto y coma ";"


Con esto ya quedará solucionado el problema y tendremos las Tareas actualizadas y nuestros datos no se habrán perdido.



¿Dudas?


¿Por qué no importar solo el archivo .sql que exportamos ya que incluye un "drop2 de las tablas?


Es otra opción de hacerlo y más rápida. Pero pudiera ser que las tablas nuevas que ha creado Moodle relacionadas con el módulo de "assignment" tuvieran algún dato distinto a la estructura que tenían las tablas anteriormente. 


Por ese motivo creemos que esta opción es más limpiar de hacer.


Si te ocurre esto y no consigues corregir este error, contacta con nosotros.