12

ここでも同様の質問がありますが、実際に質問に答える回答はありません。受け入れられた回答は、コンソールにログインしてすべてのレコードを破棄する方法を示しているだけです。これは、この場合必要なものではありません。

単一のテーブル (関連付けがない) を完全に破棄し、既存の移行で再作成する必要があります。

のようなものはありますか?

heroku pg:destroy_table "Products"

次に、移行を再度実行すると、新しいスキーマでテーブルが作成されます。

heroku run rake db:migrate
4

2 に答える 2

22

を使用してみてください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

于 2013-01-02T17:16:41.483 に答える
3

これを正しく行う方法

私のようにここに到着した人のために: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

それはそれを行う必要があります!

于 2016-07-26T16:13:09.077 に答える