2012-01-17 3 views
4

Я использую серверы Django 1.2 и 1.3 и MySql.Изменение базы данных базы данных Django с MySql на PostgreSQL

После того, как в то время как получить сообщение об ошибке при миграции моей базы данных MySql с югом:

! Error found during real run of migration! Aborting. 

! Since you have a database that does not support running 
! schema-altering statements in transactions, we have had 
! to leave it in an interim state between migrations. 
... 
! The South developers regret this has happened, and would 
! like to gently persuade you to consider a slightly 
! easier-to-deal-with DBMS 

мне было интересно, если мигрирующий моими базы данных из MySql в PostgreSQL может предотвратить эту ошибку. Во-вторых, будет ли переход с MySql на PostgreSQL более активным, чем создание dumpdata на базе mysql, измените настройки, чтобы указать на PostgreSQL и loaddata на новом бэкэнд?

Я видел this stackoverflow вопрос, но он говорит о том, что его база данных слишком большая. Я не думаю, что это будет с моими базами данных. У меня нет каких-либо пользовательских команд SQL в моих проектах Django.

+0

просто попробовать на mysql2postgres данные в ответ http://stackoverflow.com/ a/8385094/540341 ​​- если все будет хорошо, это займет минуты. вы можете сделать резервную копию своих db и конфигураций до перехода на 100% безопасным. – filiprem

+0

еще один вариант - остаться на MySQL, но изменить движок InnoDB. см. http://stackoverflow.com/questions/4834415/does-djangos-south-migration-tool-work-for-innodb – filiprem

+0

@filiprem, спасибо, возможно, работает. Мне интересно, хотя, если специально перейти на postgreSQL, это также не произойдет. У меня есть еще несколько причин, чтобы мигрировать. Я читал о mysql2postgres, он будет хорошим резервом в случае, если что-то пойдет не так с простыми дампами/loaddata. –

ответ

5

Я устал видеть эту ошибку, используя Юг, и да, переход на PostgreSQL изгнал ее!

Приложение mysql2postgres, написанное на Ruby, предложенное в комментариях выше, не работает для меня (оно будет работать, выводить некоторые данные на экран, но не копировать любые строки данных, для меня). Не знаю, почему. Но с удовольствием есть переписывание Python из него, которая работала безупречно (для меня, в конце концов):
http://pypi.python.org/pypi/py-mysql2pgsql

Единственный глюк я нашел:

Первоначально я думал, что это будет безопасным для настройки таблиц в PostgreSQL db через syncdb, а затем переносить данные только. Я пробовал это, но таблицы переносятся в алфавитном порядке, и это нарушает ограничения внешнего ключа для некоторых таблиц (строки относятся к строкам в таблицах, которые еще не импортированы).

В следующий раз я попробовал структуру + миграцию данных. Это мигрировало отлично, но я столкнулся с некоторыми проблемами в Django, особенно с сайтом администратора. Похоже, скрипт миграции создал некоторые различные ограничения таблицы из того, что было бы у Django.

Я решил это, взломав скрипт mysql2pgsql, чтобы соблюдать порядок таблиц, заданный в свойстве yaml config only_tables, а затем выполнить миграцию только с синхронизацией +. По пробной версии и ошибке я перетасовал порядок упорядочения таблиц для моей миграции до тех пор, пока все они не будут импортированы успешно.

UPDATE:
Мой тянуть запрос хака описанного выше поступил так что вы можете сделать это сейчас от основной версии:
https://github.com/philipsoutham/py-mysql2pgsql

+0

Спасибо, это именно то, что мне нужно.Я собираюсь попробовать ваш успешный маршрут миграции. –

+0

В настоящее время я размещаю это решение. Он работает, только до сих пор встречается проблема: http://stackoverflow.com/questions/6466836/postgres-sequences-without-an-owned-by-attribute-do-not-return-an-id-in-django –

 Смежные вопросы

  • Нет связанных вопросов^_^