15

我开始和 Ecto 一起玩,试图理解它。正如预期的那样,我搞砸了(使用用户模型)并且在运行迁移时出现错误:

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

现在,我想使用 shell/PgAdmin III 清理数据库,这样我就可以修复我的模型并再次运行迁移。我已经设置了 PgAdmin,但我看不到任何“用户”表......这样做的最佳方法是什么(使用 Ecto、PostgreSQL shell 或 PgAdmin)?

4

2 回答 2

21

使用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
于 2015-09-13T15:05:07.333 回答
2

如果所有表(视图、序列等)都归同一个用户所有,那么

drop owned by foobar;

是最快的方法(其中 foobar 是拥有一切的 Postgres 用户的名称)。这将真正删除该用户拥有的所有内容,无论它是如何创建的。如果由于某种原因您使用超级用户(通常postgres)创建了所有内容,您也不能使用它 - 但无论如何您都不应该将它用于“常规”事物。

于 2015-09-10T18:41:10.083 回答