这里也有类似的问题,但是没有一个答案真正回答了问题。接受的答案只显示了如何登录控制台并销毁所有记录。这不是我在这种情况下需要的。
我需要完全废弃单个表(它没有关联),并使用现有迁移重新创建它。
有什么像?
heroku pg:destroy_table "Products"
我将再次运行我的迁移,它将用新的模式创建表:
heroku run rake db:migrate
您可以尝试使用heroku pg:psql
。这将打开一个数据库控制台,您可以在其中执行任意SQL:
DROP TABLE products;
您可以在heroku文档中找到更多关于pg:psql的信息:https://devcenter.heroku.com/articles/heroku-postgresql#pgpsql
PostgreSQL文档:http://www.postgresql.org/docs/9.1/static/sql-droptable.html
如何正确使用
对于像我一样到达这里的人:强烈考虑不运行公认答案中建议的DROP TABLE products
。
heroku run rake db:migrate:down VERSION=20160518643350
VERSION是迁移文件上的时间戳,即:
的前缀 db/migrate/20160518643350_create_products.rb
然后,修改您的模式(或创建一个新的迁移)并运行它:
heroku run rake db:migrate:up VERSION=20160518643350
当您在Rails中创建一个新的PG数据库时,还会创建一个schema_migrations
表来跟踪您已经迁移的迁移。如果您从Heroku的Postgres控制台(heroku pg:psql
)删除一个表,您的迁移文件将不知道它,并且当您尝试使用新模式再次运行迁移时,rails将不会创建表,因为它认为它已经存在。
如果heroku run rake db:migrate:up ...
不工作
如果您已经运行了heroku pg:psql
并删除了表(DROP TABLE products;
),那么从迁移中创建表可能会遇到问题,因为如上所述,Rails认为表在那里。如果是这种情况,请执行以下步骤:
1。在Heroku上打开psql控制台,创建任意的products
表
heroku pg:psql
CREATE TABLE products(foo int);
退出psql
终端。
2。向下运行迁移,以便schema_migrations记录删除的表
heroku run rake db:migrate:down VERSION=20160518643350
这将删除您的新表,并记录迁移。
3。运行迁移以创建新表
heroku run rake db:migrate:up VERSION=20160518643350
应该可以了!