2013-11-01 23 views
1

我有一個實體,稱爲用戶耶索德遷移自定義數據類型

User 
    ident Text 
    ... 
    status Status Default=Claimed 

狀態是我做了一個數據類型。我在我的PostgreSQL表已經排,所以我得到一個耶索德devel的遷移錯誤當試圖編譯

Migrating: ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL 
31/Oct/2013:07:17:19 -0500 [Debug#SQL] "ALTER TABLE \"user\" ADD COLUMN \"status\" VARCHAR NOT NULL" [] @(persistent-1.2.2.0:Database.Persist.Sql.Raw  ./Database/Persist/Sql/Raw.hs:37:5) 
devel.hs: SqlError {sqlState = "23502", sqlExecStatus = FatalError, sqlErrorMsg = "column \"status\" contains null values", sqlErrorDetail = "", sqlErrorHint = ""} 

預計這我知道,現在我應該去給psql做遷移自己。 我以爲遷移代碼應該看起來像這樣: ALTER TABLE「user」ADD COLUMN「status」VARCHAR NOT NULL DEFAULT聲稱 但我得到一個錯誤,說列聲明不存在。如何添加具有不是文本或數字的默認值的列?

回答

1

那麼,你的alter query說新的列類型是varchar,因此默認值是varchar(String)。

ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT 'Claimed' 
+0

這是正確的,除了我記得在雙引號我也有一個錯誤。 PG中Sting值是單引號。 – ChrisU

+0

好的,更新的答案 – Ankur

0

我自己解決了這個問題。這只是一個PostgreSql錯誤。聲稱已做可以單引號是這樣的:

ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT 'Claimed' 

在PG單引號是字符串常量,而雙引號指定區分大小寫的標識符。在這種情況下,聲明未聲明的聲明被視爲標識符,這就是爲什麼我得到一列< ...>不存在的錯誤。 Here is the PostgresSql documentation.