gpt4 book ai didi

Grails 数据库迁移插件静默无法添加非空约束

转载 作者:行者123 更新时间:2023-12-01 12:52:50 26 4
gpt4 key购买 nike

我正在尝试熟悉 Grails Database Migration Plugin使用 this site作为引用。我在尝试添加具有非空约束的属性时遇到了问题。我按照网站上显示的方式对我的脚本进行建模(添加列,为现有记录设置默认值,然后向列添加不可为空的约束):

databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}

grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'")
}
}

addNotNullConstraint(tableName: "game", columnName: "genre")
}
}

当我尝试更新我的数据库时,它默默地失败了。因此,我将三个更改拆分为三个不同的 groovy 脚本来跟踪问题。

第一个文件(添加列)工作正常:

databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}
}
}

第二个文件(为现有记录分配默认值)工作正常:

databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "defaultValue") {
grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'")
}
}
}
}

第三个文件(添加非空约束)默默失败:

databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "notNull") {
addNotNullConstraint(tableName: "game", columnName: "genre")
}
}

日志文件仅显示与插件相关的内容:

2012-06-28 10:17:11,694 [main] INFO liquibase - Successfully acquired change log lock
2012-06-28 10:17:11,972 [main] INFO liquibase - Reading from DATABASECHANGELOG
2012-06-28 10:17:11,980 [main] INFO liquibase - Reading from DATABASECHANGELOG
2012-06-28 10:17:12,009 [main] INFO liquibase - Successfully released change log lock

如果我检查 databasechangelog 表,我可以看到脚本还没有被执行。控制台给了我这个:

| Starting dbm-update for database root @ jdbc:mysql://localhost/migration

但是没有

| Finished dbm-update

就像我看到的成功更新一样。

注意: 请注意,我用作引用的网站使用的是 1.0 版,我使用的是 1.1 版。我很难找到此插件的教程或示例,更难找到最新版本(一个月前发布)的信息。

谁能指出我在非空约束方面出了什么问题?

最佳答案

午饭时我在想这个问题,想知道为什么我没有采取明显的调试步骤。 groovy 脚本更改是从头开始进行的。添加列的更新有效,这意味着我的数据库和我的域对象之间的唯一区别是不可空约束:

class Game {
String genre

static constraints = {
genre(nullable: false, blank: false)
}
}

...那么为什么不运行 grails dbm-gorm-diff 看看插件带来了什么?

结果是这样的:

databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340897310305-1") {
addNotNullConstraint(columnDataType: "varchar(255)", columnName: "genre", tableName: "game")
}
}

我创建的更改脚本与插件制作的脚本之间的唯一区别是:
列数据类型:“varchar(255)”

我将它添加到我制作的脚本中(只是为了确保我没有做错任何其他事情)并且宾果游戏,更新成功了。

关于Grails 数据库迁移插件静默无法添加非空约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11249129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com