如何清理使用 Phoenix/Ecto 创建的 PostgreSQL 数据库

How to clean PostgreSQL database created with Phoenix/Ecto

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

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

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

如果所有 个表(视图、序列...)属于同一用户,则

drop owned by foobar;

是最快的方法(其中 foobar 是拥有所有内容的 Postgres 用户的名称)。这将真正删除该用户 拥有 的所有内容,无论它是如何创建的。如果出于某种原因你用超级用户(通常是 postgres)创建了所有内容,你也不能使用它 - 但你不应该将它用于 "regular" 东西。

使用 ecto,您可以在项目中获得一些新的混合任务来处理数据库。他们可能会帮助你:

  • mix ecto.create - 创建您的存储库用作后端的数据库
  • mix ecto.migrate - 运行s 存储库的待处理迁移
  • mix ecto.drop - 删除数据库

还有一些新任务,但这三个可以解决您的问题。尝试 mix --help 完成其他新任务。 在您的情况下:首先 运行 mix ecto.drop 删除数据库,mix ecto.create 再次重新创建它,最后 mix ecto.migrate 迁移表,然后您又回到了起点。

我已经设置了一些键盘快捷键来更快地键入这些命令:

  • mecmix ecto.create
  • 的别名
  • memmix ecto.migrate
  • 的别名
  • medmix ecto.drop
  • 的别名