Ruby on rails 3 如何在RubyonRails Heroku应用程序中删除单个Postgres表?
,但没有一个答案真正回答了这个问题。接受的答案只是显示如何登录到控制台并销毁所有记录。这不是我在这种情况下需要的 我需要完全废弃一个表(它没有关联),并使用现有迁移重新创建它 有类似的东西吗Ruby on rails 3 如何在RubyonRails Heroku应用程序中删除单个Postgres表?,ruby-on-rails-3,postgresql,heroku,drop-table,Ruby On Rails 3,Postgresql,Heroku,Drop Table,,但没有一个答案真正回答了这个问题。接受的答案只是显示如何登录到控制台并销毁所有记录。这不是我在这种情况下需要的 我需要完全废弃一个表(它没有关联),并使用现有迁移重新创建它 有类似的东西吗 heroku pg:destroy_table "Products" 然后,我将再次运行迁移,它将使用新架构创建表: heroku run rake db:migrate 您可以尝试使用heroku pg:psql。这将打开数据库的控制台,您可以在其中执行任意SQL: DROP TABLE produc
heroku pg:destroy_table "Products"
然后,我将再次运行迁移,它将使用新架构创建表:
heroku run rake db:migrate
您可以尝试使用heroku pg:psql。这将打开数据库的控制台,您可以在其中执行任意SQL:
DROP TABLE products;
您可以在heroku文档中找到关于pg:psql的更多信息:
PostgreSQL文档:如何正确执行此操作
对于那些像我一样到达这里的人:强烈地考虑不要在接受的答案中建议运行<代码>下拉表产品< /代码>。考虑使用这个代替:
heroku run rake db:migrate:down VERSION=20160518643350
版本是迁移文件上的时间戳,即前缀:
db/migrate/20160518643350\u create\u products.rb
然后,修改模式(或创建新迁移)并运行它:
heroku run rake db:migrate:up VERSION=20160518643350
当您在Rails中创建一个新的PG数据库时,还会创建一个schema_migrations
表来跟踪您已经完成的迁移。如果您从Heroku的Postgres控制台(Heroku pg:psql
)中删除一个表,您的迁移文件将不知道该表,并且当您尝试使用新模式再次运行迁移时,rails将不会创建该表,因为它认为该表已经存在
如果heroku运行rake db:migrate:up…不起作用
如果您已经运行了heroku pg:psql
并删除了表(删除表产品;
),那么从迁移创建表时可能会遇到问题,因为如上所述,Rails认为表就在那里。如果是这种情况,请采取以下步骤:
1.在Heroku上打开psql控制台,创建任意的products
表
退出psql
终端
2.向下运行迁移,以便schema_迁移记录删除的表
这将删除新表,并记录迁移
3.运行迁移以创建新表
那就够了 此表是使用上次应用的迁移创建的吗?如果是这样,只需执行
rake db:migrate:redo
。我有一个迁移为用户创建表
,手动删除该迁移,并创建一个名为相同但不同字段的新迁移。嗯,在回滚迁移之前,您不应该删除该迁移。。。现在迁移版本表与代码不匹配。这一定是导致我头发变白的原因。:)从现在起,我将学会只使用迁移,并限制手动调整以防止打破神奇的黑匣子。@PinnyM:schema_迁移没有错,schema_迁移与您的迁移不匹配,您可以(也应该)这样做时不时地删除旧的迁移,以防止它们阻塞。在我冒险直接通过PSQL删除表之前,非常感谢@Matt this帮助我解决了这个问题。
heroku pg:psql
CREATE TABLE products(foo int);
heroku run rake db:migrate:down VERSION=20160518643350
heroku run rake db:migrate:up VERSION=20160518643350