2017-04-10 57 views
0

在Phoenix應用程序中使用seedfile時,如果種子運行多次,是否可以重新啓動表的標識?Phoenix/Ecto - 種子文件中的重啓標識

例如,我目前用下面的種子工作:

PhoenixApp.Repo.delete_all PhoenixApp.Role 
PhoenixApp.Repo.insert!(%PhoenixApp.Role{role: "admin"}) 
PhoenixApp.Repo.insert!(%PhoenixApp.Role{role: "non-admin"}) 

第一行清除表(這樣,如果種子多次運行記錄不堆放),和下面的行創建種子記錄。運行此代碼一次將創建兩個帶有自動增量主鍵'1'和'2'的記錄,就像您通常所期望的那樣。但是,如果我想添加其他的記錄表以後,​​如

PhoenixApp.Repo.insert!(%PhoenixApp.Role{role: "superuser"}) 

行的ID現在是「3」,「4」和「5」,因爲身份不重新啓動。

Ecto是否有重新啓動表格標識的命令?我意識到我可以通過IEx將其他記錄添加到我的表中,但如果可能的話,我寧願重新啓動身份。

回答

2

在PostgreSQL中,您可以執行ALTER SEQUENCE <sequence name> RESTART將序列的值重置爲其原始值。 ID主鍵的序列名稱將爲#{table_name}_id_seq。再次

Repo.query("ALTER SEQUENCE comments_id_seq RESTART") 
iex(1)> Repo.insert!(%Comment{}).id 
11 
iex(2)> Repo.delete_all(Comment) 
{11, nil} 
iex(3)> Repo.insert!(%Comment{}).id 
12 
iex(4)> Repo.query("ALTER SEQUENCE comments_id_seq RESTART") 
{:ok, 
%Postgrex.Result{columns: nil, command: :alter_sequence, connection_id: 3360, 
    num_rows: 0, rows: nil}} 
iex(5)> Repo.insert!(%Comment{}).id 
1 
+0

感謝,@Dogbert:您可以使用Repo.query運行查詢,例如! – skwidbreth