类似的问题在这里,但没有一个答案真正回答了这个问题。接受的答案仅显示了如何登录控制台并销毁所有记录。在这种情况下,这不是我需要的。
我需要完全废弃一个表(它没有关联)并使用现有迁移重新创建它。
有没有类似的东西?
heroku pg:destroy_table "Products"
然后我会再次运行我的迁移,它将使用新模式创建表:
heroku run rake db:migrate
类似的问题在这里,但没有一个答案真正回答了这个问题。接受的答案仅显示了如何登录控制台并销毁所有记录。在这种情况下,这不是我需要的。
我需要完全废弃一个表(它没有关联)并使用现有迁移重新创建它。
有没有类似的东西?
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;
(如果是这种情况,请采取以下步骤:
products
表heroku pg:psql
CREATE TABLE products(foo int);
退出psql
终端。
heroku run rake db:migrate:down VERSION=20160518643350
这将删除您的新表,并记录迁移。
heroku run rake db:migrate:up VERSION=20160518643350
应该这样做!