Как очистить базу данных PostgreSQL, созданную с помощью Phoenix/Ecto

Я начинаю играть с Ecto, пытаясь понять это. Как и ожидалось, я перепутал (с моделью пользователя), и я получаю сообщение об ошибке при выполнении миграции:

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

Теперь я хочу очистить базу данных с помощью оболочки /PgAdmin III, чтобы затем я смог исправить свою модель и снова запустить миграции. Я настроил PgAdmin, но я не вижу никакой "пользовательской" таблицы... Какой лучший способ сделать это (с помощью Ecto, оболочки PostgreSQL или PgAdmin)?

Ответ 1

С помощью ecto вы получаете несколько новых задач микширования в своем проекте для работы с базой данных. Они могут вам помочь:

  • mix ecto.create - создать базу данных, которая используется вашим хранилищем в качестве бэкэнд
  • mix ecto.migrate - запускает ожидающие миграции для вашего репозитория
  • mix ecto.drop - отбрасывает базу данных

Есть еще несколько новых задач, но эти три будут исправлять вашу проблему. Попробуйте mix --help для других новых задач. В вашем случае: сначала запустите mix ecto.drop, чтобы удалить базу данных, mix ecto.create, чтобы повторно создать ее снова и, наконец, mix ecto.migrate, чтобы перенести таблицы, и вы вернулись в начало.

Я установил несколько быстрых клавиш, чтобы быстрее набирать эти команды:

  • mec является псевдонимом для mix ecto.create
  • mem является псевдонимом для mix ecto.migrate
  • med является псевдонимом для mix ecto.drop

Ответ 2

Если все таблицы (представления, последовательности,...) принадлежат одному и тому же пользователю, то

drop owned by foobar;

- самый быстрый метод (где foobar - это имя пользователя Postgres, владеющего всем). Это действительно потеряет все, принадлежащие этому пользователю, независимо от того, как это было создано. Вы также не можете использовать это, если по какой-то причине вы создали все с помощью суперпользователя (обычно postgres) - но вы не должны использовать это для "обычных" вещей в любом случае.