1

我有一个名为用户的实体

User
  ident Text
  ...
  status Status Default=Claimed

状态是我制作的一种数据类型。我的 Postgresql 表中已经有行,因此在尝试编译时出现 yesod 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 Claimed 但我收到一个错误,说列 Claimed 不存在。如何添加默认值不是文本或数字的列?

4

2 回答 2

1

好吧,您的 alter 查询说新的列类型是 varchar,因此默认值是 varchar(字符串)。

ALTER TABLE "user" ADD COLUMN "status" VARCHAR NOT NULL DEFAULT 'Claimed'
于 2013-11-01T12:24:42.087 回答
0

我自己解决了这个问题。这只是一个 PostgreSql 错误。声称确实是这样单引号的:

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

在 PG 中,单引号用于字符串常量,而双引号指定区分大小写的标识符。在这种情况下,Claimed unquoted 被认为是一个标识符,这就是为什么我得到一个列 <...> 不存在错误。 这是 PostgresSql 文档。

于 2013-11-01T12:32:10.503 回答