如何清理使用 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
迁移表,然后您又回到了起点。
我已经设置了一些键盘快捷键来更快地键入这些命令:
mec
是 mix ecto.create
的别名
mem
是 mix ecto.migrate
的别名
med
是 mix ecto.drop
的别名
我开始玩 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
迁移表,然后您又回到了起点。
我已经设置了一些键盘快捷键来更快地键入这些命令:
mec
是mix ecto.create
的别名
mem
是mix ecto.migrate
的别名
med
是mix ecto.drop
的别名