如何在Ruby on Rails Heroku应用程序中删除单个Postgres表



这里也有类似的问题,但是没有一个答案真正回答了问题。接受的答案只显示了如何登录控制台并销毁所有记录。这不是我在这种情况下需要的。

我需要完全废弃单个表(它没有关联),并使用现有迁移重新创建它。

有什么像?

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

应该可以了!

相关内容

  • 没有找到相关文章

最新更新