2015-09-10 42 views
11

我開始嘗試使用Ecto來理解它。正如預期的那樣我搞砸了(用戶模式),並在運行遷移我得到一個錯誤:如何清理使用Phoenix/Ecto創建的PostgreSQL數據庫

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

現在,我想使用shell/pgAdmin的III,這樣我就可以解決我的模型來清理數據庫並再次運行遷移。 我已經設置了PgAdmin,但我無法看到任何「用戶」表... 這樣做的最佳方式是什麼(使用Ecto,PostgreSQL shell或PgAdmin)?

+0

如果所有表(視圖,序列...)都屬於同一個用戶,那麼'drop owned通過foobar'是最快捷的方法(其中'foobar'是Postgres用戶擁有所有內容的名稱) –

+0

完成!難道你不想讓這個答案能讓我接受嗎?順便說一句,你有任何Postgres管理指南,你會建議? –

回答

15

隨着ecto你得到了一些新的混合任務到你的項目來處理數據庫。他們可能會幫助您:

  • mix ecto.create - 創建它使用您的存儲庫作爲後端
  • mix ecto.migrate數據庫 - 運行您的倉庫
  • mix ecto.drop懸而未決的遷移 - 刪除數據庫

還有一些新的任務,但這三個將解決你的問題。嘗試使用mix --help來完成其他新任務。 在你的情況:首先運行mix ecto.drop刪除數據庫,mix ecto.create重新創建它,最後mix ecto.migrate遷移表,你又回來了。

我設置了一些快捷鍵來快速鍵入以下命令:

  • mecmix ecto.create
  • mem一個別名是mix ecto.migrate
  • med一個別名是mix ecto.drop
一個別名
+0

這回答了「用Phoenix/Ecto創建」這個問題的一部分。 – Morkrom

2

如果所有表(視圖,序列,...)由同一用戶擁有,那麼

drop owned by foobar; 

是最快的方法(其中foobar的是Postgres用戶擁有一切的名稱) 。這將真正放棄該用戶擁有的所有,無論這是如何創建的。如果出於某種原因,您也不能使用此功能(通常爲postgres) - 但不應將其用於「常規」事物。