我使用Rails和Postgres。我目前创建了一个Like表。我需要删除此表并重新创建它。这是我到目前为止所做的事情。
1)将create_likes
迁移文件重命名为create_likes_old
,以便与迁移中的文件名冲突。
2)将迁移中的表格名称从create_table :likes
更改为create_table :likes_old
。
3)生成新的create_likes
迁移,创建一个名为Like的表。
目前,当我运行rake db:migrate
时,我遇到了以下问题:
PG::DuplicateTable: ERROR: relation "likes" already exists
这使得似乎从未将Like表重命名为LikeOld。什么错了,我该如何解决这个问题?
答案 0 :(得分:4)
旧的迁移不会在您更改内容时运行,而不应重命名。即使它们确实运行,将create_table :likes
更改为create_table :old_likes
也不可能更改现有表的名称。那不是create_table
的作用。充其量,重新运行该迁移现在将导致创建一个名为old_likes
的新表,没有内容,同时保持旧likes
表不受影响。实际上重新运行该迁移将会失败,因为它将首先尝试撤消迁移,删除尚不存在的表old_likes
。
您需要做的是创建一个名为rename_likes_to_old_likes
的新迁移,它实际上使用rename_table
重命名该表。然后,要么:
OR
create_new_likes_table
等唯一名称创建新迁移,并在那里介绍新表。