2012-06-09 1 views
2

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

class Migration(SchemaMigration): 

    def forwards(self, orm): 
     db.add_column('activities_newsitem', 'related_story', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Story'], null=True, blank=True),keep_default=True) 

К сожалению, он терпит неудачу, и я не знаю, почему. Ниже приведен вывод. Обратите внимание, что он просто запускает запрос столбца добавления. Фактически, когда я смотрю в БД, столбец правильно там.

Но по какой-то причине после этого он запускает столбец падения, и это то, что терпит неудачу. Почему это так?

DEBUG south execute "ALTER TABLE `activities_newsitem` ADD COLUMN `related_story_id` integer NULL;" with params "[]" (generic.py:145) 
DEBUG south execute "ALTER TABLE `activities_newsitem` ADD CONSTRAINT `related_story_id_refs_id_3d3841088db0fdb0` FOREIGN KEY (`related_story_id`) REFERENCES `projects_story` (`id`);" with params "[]" (generic.py:145) 
DEBUG south execute "CREATE INDEX `activities_newsitem_related_story_id` ON `activities_newsitem` (`related_story_id`);" with params "[]" (generic.py:145) 
DEBUG south execute "ALTER TABLE `activities_newsitem` ADD COLUMN `related_story_id` integer NULL;" with params "[]" (generic.py:145) 
DEBUG south execute "ALTER TABLE `activities_newsitem` ADD CONSTRAINT `related_story_id_refs_id_3d3841088db0fdb0` FOREIGN KEY (`related_story_id`) REFERENCES `projects_story` (`id`);" with params "[]" (generic.py:145) 
DEBUG south execute "ALTER TABLE `activities_newsitem` DROP COLUMN `related_story_id` CASCADE;" with params "[]" (generic.py:145) 
! 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. 

Спасибо за любую помощь

+0

Выполняется ли это одно и то же заявление дважды? Может ли это как-то вызвать попытку отката? Я не знаю ... GL! –

ответ

1

Похоже, он пытался запустить команду дважды. Если вы посмотрите в свою папку миграции, у вас есть 2 одинаковой миграции? Это может произойти, если вы дважды запустите команду create migration, не выполнив миграцию.

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

Предполагая, что вы используете unixy системы (OSX/Linux), из командной строки:

mysql -u username -p password

затем

select * from south_migrationhistory;

Ваша миграция там?

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

подделать вашу миграцию:

python manage.py migrate activities --fake 0001

где 0001 это количество миграции (все файлы миграция начинается с цифрой).

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