背景:我们有一个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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个应该在每个现有行中插入值'No text',因此满足not null约束.Liquibase"添加列"文档.
但是当应用迁移更改集时,我得到以下异常:
liquibase.exception.DatabaseException: Error executing SQL ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL: ERROR: column "abstract_trimmed" contains null values
Run Code Online (Sandbox Code Playgroud)
在我看来,它不使用'value'属性.
如果我将变更集更改为工作,如下所示我可以实现相同的目标.但我不想(也不应该)这样做.
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")
}
Run Code Online (Sandbox Code Playgroud)
Liquibase真的忽略了我的value属性,还是还有其他东西在我身上看不到?
我正在使用Grails 1.3.7,Database-migration插件1.0,Postgres 9.0