背景:我们有一个 Grails 1.3.7 应用程序,并且正在使用 Liquibase 来管理我们的数据库迁移。
我正在尝试向现有的非空表添加一个新列。
我的变更集如下所示:
changeSet(author: "someCoolGuy (generated)", id: "1326842592275-1") {
addColumn(tableName: "layer") {
column(name: "abstract_trimmed", type: "VARCHAR(455)", value: "No text") {
constraints(nullable: "false")
}
}
}
应该将值“无文本”插入到每个现有行中,因此满足非空约束。Liquibase“添加列”文档。
但是当应用迁移变更集时,我得到以下异常:
liquibase.exception.DatabaseException: Error executing SQL ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL: ERROR: column "abstract_trimmed" contains null values
在我看来,它没有使用“值”属性。
如果我将变更集更改为如下所示,我可以实现相同的目标。但我不想(也不应该)这样做。
changeSet(author: "someCoolGuy (generated)", id: "1326842592275-1") {
addColumn(tableName: "layer") {
column(name: "abstract_trimmed", type: "VARCHAR(455)")
}
addNotNullConstraint(tableName: "layer", columnName:"abstract_trimmed", defaultNullValue: "No text")
}
Liquibase 真的忽略了我的value
属性,还是这里发生了我看不到的其他事情?
我正在使用 Grails 1.3.7、数据库迁移插件 1.0、Postgres 9.0