2015-09-10 9 views
11

私はEctoでこれを理解しようとしています。予想したように私は(ユーザーモデルで)台無しにし、移行の実行中に、私はエラーを取得する:今すぐPhoenix/Ectoで作成されたPostgreSQLデータベースを消去する方法

(Postgrex.Error) ERROR (duplicate_table): relation "users" already exists 

を、私はその後、私のモデルを修正することができるようにシェル/ pgAdminでIIIを使用してデータベースをきれいにしたいです移行を再度実行します。 私はPgAdminを設定しましたが、私は "ユーザ"テーブルを見ることができません... Ecto、PostgreSQLシェルまたはPgAdminでこれを行う最善の方法は何ですか?

+0

すべてのテーブル(ビュー、シーケンスなど)が同じユーザによって所有されている場合、 by foobar'は最も簡単な方法です(ここで、 'foobar'はPostgresユーザーのすべてを所有する名前です)。 –

+0

完了!私はそれを受け入れることができるようにこれを答えさせたくありませんか? BTWあなたが推奨するPostgres管理者ガイドがありますか? –

答えて

15

ectoを使用すると、データベースに対処するためにプロジェクトに新しいミックスタスクが追加されます。彼らはあなたを助けるかもしれない:

  • mix ecto.create - バックエンド
  • mix ecto.migrateとしてリポジトリで使用するデータベースを作成 - リポジトリ
  • mix ecto.dropの保留中のマイグレーションを実行します - データベース

をドロップします新しいタスクがいくつかありますが、これらの3つは問題を解決します。他の新しいタスクについては、mix --helpを試してください。 あなたの場合:最初にmix ecto.dropを実行してデータベースを削除し、mix ecto.createを再度作成し、最後にmix ecto.migrateを再作成してください。開始時に戻ってきます。

私はいくつかのキーボードショートカットが速く、これらのコマンドを入力するためのセットアップをしました:

  • mecmix ecto.create
  • memの別名であるmix ecto.migrate
  • medの別名はmix ecto.drop
の別名です
+0

これは質問の「Phoenix/Ectoで作成された」部分に答えます。 – Morkrom

2

場合は、すべてのテーブル(ビュー、シーケンスは、...)(foobarにはすべてを所有しているPostgresのユーザーの名前です)、その後

drop owned by foobar; 

が最速の方法で、同一のユーザが所有しています。これは実際にはどのように作成されたかにかかわらず、が所有するのすべてをそのユーザーが削除します。何らかの理由でスーパーユーザー(通常はpostgres)ですべてを作成した場合でも、これを使用することはできませんが、とにかく "普通の"ものには使用しないでください。

関連する問題