Как получилось обновить Drupal 6 на Drupal 7 при ошибке DatabaseSchemaObjectExistsException

Попытки обновить Drupal 6 на Drupal 7 на сайте "FirstHand.ru::Личный опыт" проводились неоднократно. Каждый раз выходила какая нибудь ошибка и потом приходилось все реанимировать, возвращать назад.

Я добавлял, отключал, удалял модули. Пытался обновить, используя модули по экспорту и импорту, но ничего не получалось.

Я простой пользователь, с программированием знаком, но не настолько, чтобы самому написать нужный модуль. Поэтому я искал простой, доступный способ.

Последнее, что стало возникать при обновлении, это надпись:

"DatabaseSchemaObjectExistsException: Table <em class="placeholder">role_permission</em> already exists. in DatabaseSchema->createTable() (line 657 of ..\includes\database\schema.inc). The website encountered an unexpected error. Please try again later."

Она возникала каждый раз, когда я пытался обновить Drupal-6 на Drupal-7.

Поиски по интернету ни к чему не приводили. Английский я знаю слабовато, а в русском ничего не находилось.

Я понимал что проблема в базе данных. Об этом "намекала" надпись "DatabaseSchemaObjectExistsException: Table <em class="placeholder">role_permission</em> already exists. in DatabaseSchema->createTable()" и поэтому в очередную попытку обновления Drupal-а я начал "копать" именно там.

Я "издевался" над базой два дня, но в результате я нашел способ обновления Друпал6 на Друпал7 без этой ошибки.

Оказалось все довольно просто. Я то думал что сообщение "Table <em class="placeholder">role_permission</em> already exists." означает, что в какой то таблице уже существует запись "<em class="placeholder">role_permission</em>" и поэтому Друпал не может обновить эту таблицу, а на самом деле здесь говориться что таблица role_permission уже существует ("Table role_permission already exists.").

То есть когда то, при неудачном обновлении, эта таблица была уже создана и сейчас она не давала нормально обновиться.

Возможно, при неудачном обновлении, в базе данных Друпала таких таблиц может возникнуть несколько.

Поэтому, что бы обновиться без ошибок, нужно из базы данных Друпала удалить ВСЕ таблицы, которые не являются таблицами Drupal-а 6-ой версии. Из таблицы "system" базы данных Друпала удалить все записи, которые относятся ко всему "чужому". Это сторонние модули и темы.

Когда я это сделал, обновление Друпала на 7-ую версию у меня прошло гладко и без этой ошибки.

Эти действия, я думаю, могут помочь при обновлении Друпала на следующую версию и при возникновении других ошибок, подобных "DatabaseSchemaObjectExistsException: Table <em class="placeholder">role_permission</em> already exists. in DatabaseSchema->createTable() (line 657 of ..\includes\database\schema.inc)".

Тематика:

Метки / Tags: