Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在RubyonRails Heroku应用程序中删除单个Postgres表?_Ruby On Rails 3_Postgresql_Heroku_Drop Table - Fatal编程技术网

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