Миграция Drupal с БД mySQL на БД PostgreSQL

Главные вкладки

Аватар пользователя MAMONT MAMONT 14 декабря 2007 в 12:10

Внимание, Все названия БД, логины и пароли заменить на свои варианты!

community47 - текущая база mySQL друпала
community_drupal - новая база друпала на PostgreSQL
prototype.sql - дамп структуры БД для PostgreSQL
community_data_dump_sql.sql - дамп данных (без структуры) из БД mySQL

Запустить http://exampe.com/update.php если нужно сделать апдейт после обновки модулей или если вы просто забыли зделать это раньше.
Запустить http://exampe.com/cron.php почистить мусор и уменьшить размер таблиц логов

Сделайте копию БД mySQL community47 (на тот случай если надо будет вернутся обратно)

Инсталируем новый друпал и все используемые модули (точнее только те, что создают таблицы свои) на БД PostgreSQL.
Теперь мы имеем структуру БД Друпала именно под постгрес.
Внимание, простой конвертацией базы из mySQL в PostgreSQLвы добьетесь не многого, так как для друпала структуры различных баз отличаются, а именно отсуствием таблицы sequence в PostgreSQL.
Итак мы уже имеем после установки Друпала на PostgreSQLнекую структуру, которая нам пригодится.
Делаем backup дамп структуры БД для PostgreSQL (community_data_dump_sql.sql)

Если какой то модуль не имеет варианта инсталяции под PostgreSQL структуру этой таблицы надо оккуратненько ручками написать.

В БД mySQL community47 выполним следующее:
DROP TABLE IF EXISTS moderation_filters;
DROP TABLE IF EXISTS moderation_roles;
DROP TABLE IF EXISTS moderation_votes;
TRUNCATE cache;
TRUNCATE sessions;
TRUNCATE watchdog;
TRUNCATE locales_source;
TRUNCATE locales_target;
UPDATE node_revisions SET log = "" WHERE log IS NULL;

mysqldump --host=mysql.exampe.com -u drupal -p -tv --default-character-set=utf8 --quote-names=false --add-locks=false --complete-insert --compatible=postgresql --extended-insert=false drupal > community_data_dump_sql.sql

psql -h postgres.exampe.com -q -f prototype.sql drupal drupal
psql -h postgres.exampe.com -q -f community_data_dump_sql.sql drupal drupal

Игнорировать сообщения подобные (psql:community_data_dump_sql.sql:283680: ERROR: relation "sequences" does not exist)

В postreSQL BD community_drupal выполнить:
ALTER sequence access_aid_seq restart WITH 10;
ALTER sequence accesslog_aid_seq restart WITH 2977007;
ALTER sequence aggregator_category_cid_seq restart WITH 12;
ALTER sequence aggregator_feed_fid_seq restart WITH 12;
ALTER sequence aggregator_item_iid_seq restart WITH 168;
ALTER sequence authmap_aid_seq restart WITH 133;
ALTER sequence boxes_bid_seq restart WITH 21;
ALTER sequence client_cid_seq restart WITH 10;
ALTER sequence comments_cid_seq restart WITH 3761;
ALTER sequence contact_cid_seq restart WITH 10;
ALTER sequence files_fid_seq restart WITH 420;
ALTER sequence filter_formats_format_seq restart WITH 15;
ALTER sequence locales_source_lid_seq restart WITH 10;
ALTER sequence menu_mid_seq restart WITH 109;
ALTER sequence node_access_nid_seq restart WITH 10;
ALTER sequence node_nid_seq restart WITH 1670;
ALTER sequence node_revisions_vid_seq restart WITH 3795;
ALTER sequence poll_choices_chid_seq restart WITH 127;
ALTER sequence profile_fields_fid_seq restart WITH 10;
ALTER sequence role_rid_seq restart WITH 16;
ALTER sequence smileys_id_seq restart WITH 21;
ALTER sequence subscriptions_holding_rid_seq restart WITH 10;
ALTER sequence term_data_tid_seq restart WITH 54;
ALTER sequence url_alias_pid_seq restart WITH 3995;
ALTER sequence users_uid_seq restart WITH 36032;
ALTER sequence vocabulary_vid_seq restart WITH 12;
ALTER sequence watchdog_wid_seq restart WITH 10;
ALTER sequence webform_submissions_sid_seq restart WITH 299;
(Эти значение берутся из mySQL таблицы sequence, но я для надежности везде приплюсовал +10)

Заменить в settings.php ($db_url = 'pgsql://postgres:localhost/community_drupal';)

Идем на http://exampe.com/

Идем на http://exampe.com/admin/settings/search и запускаем Re-index Site.

Я испытывал на версии Друпала 4.7, не думаю что для других версий возникнут проблемы.

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

Комментарии

Аватар пользователя MAMONT MAMONT 14 декабря 2007 в 12:50

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