2015-09-10 3 views
11

Ich beginne mit Ecto zu spielen und versuche es zu verstehen. Wie erwartet I (mit dem Benutzer-Modell) durcheinander und ich eine Fehlermeldung erhalten, während eine Migration ausgeführt wird:Wie säubere ich die PostgreSQL-Datenbank, die mit Phoenix/Ecto erstellt wurde

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

Jetzt mag ich die Datenbank reinigen mit dem Shell/PgAdmin III, so dass ich dann mein Modell beheben und führen Sie die Migrationen erneut aus. Ich habe PgAdmin eingerichtet, aber ich kann keine "Benutzer" -Tabelle sehen ... Was ist der beste Weg dies zu tun (entweder mit Ecto, PostgreSQL Shell oder PgAdmin)?

+0

Wenn alle Tabellen (views, Sequenzen, ...) durch den gleichen Benutzer gehören, dann 'Tropfen im Besitz by foobar' ist die schnellste Methode (wobei 'foobar' der Name des Postgres-Benutzers ist, der alles besitzt) –

+0

Fertig! Sie nicht, so dass diese eine Antwort machen wollen, dass ich es akzeptieren kann? Übrigens, haben Sie einen Postgres Admin Guide, den Sie empfehlen würden? –

Antwort

15

Mit ecto erhalten Sie einige neue Mischaufgaben zu Ihrem Projekt, um mit der Datenbank umzugehen. Sie könnten Ihnen helfen:

  • mix ecto.create - die Datenbank erstellen, die von Ihrem Repository als Backend verwendet wird
  • mix ecto.migrate - läuft die anstehenden Migrationen für Ihr Repository
  • mix ecto.drop - fällt die Datenbank

Es gibt einige neue Aufgaben, aber diese drei werden Ihr Problem beheben. Versuchen Sie mix --help für die anderen neuen Aufgaben. In Ihrem Fall: erster mix ecto.drop ausführen, um die Datenbank zu löschen, mix ecto.create es wieder neu zu erstellen und schließlich mix ecto.migrate die Tabellen zu migrieren, und Sie sind am Anfang zurück.

Ich habe Setup einige Tastenkombinationen schneller diese Befehle eingeben:

  • mec ist ein Alias ​​für mix ecto.create
  • mem ist ein Alias ​​für mix ecto.migrate
  • med ist ein Alias ​​für mix ecto.drop
+0

Dies beantwortet der Teil der Frage „mit Phoenix/Ecto erstellt“. – Morkrom

2

Wenn alle Tabellen (Views, Sequenzen, ...) werden von demselben Benutzer gehören, dann

drop owned by foobar; 

ist die schnellste Methode (wo foobar ist der Name des Postgres Benutzer besitzen alles) . Dies wird wirklich alles Besitz von diesem Benutzer fallen lassen, unabhängig davon, wie das erstellt wurde. Sie können dies auch nicht verwenden, wenn Sie aus irgendeinem Grund alles mit dem Superuser erstellt haben (normalerweise postgres) - aber Sie sollten das nicht für "normale" Dinge verwenden.

Verwandte Themen