我有一个名为User的实体
User
ident Text
...
status Status Default=Claimed
状态是我制作的数据类型。我的Postgresql表中已有行,因此在尝试编译时会收到yesod devel migration错误
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"用户"添加栏目#34;状态"声明VARCHAR NOT NULL DEFAULT 但我得到一个错误,说列Claimed不存在。如何添加一个默认值不是文本或数字的列?
答案 0 :(得分:1)
嗯,你的alter query说新列类型是varchar,因此默认值是varchar(String)。
ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT 'Claimed'
答案 1 :(得分:0)
我自己解决了这个问题。这只是一个PostgreSql错误。声称曾经这样单引:
ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT 'Claimed'
在PG中,单引号用于字符串常量,而双引号用于指定区分大小写的标识符。在这种情况下,Claimed unquoted被认为是一个标识符,这就是为什么我得到一个列< ...>不存在错误。 Here is the PostgresSql documentation.