Как очистить базу данных 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
) - но вы не должны использовать это для "обычных" вещей в любом случае.