使用groovy脚本进行升级

想问一下 groovy脚本添加列的时候,如果列已经存在,该怎么办
(PS:之前没有使用groovy脚本进行维护数据库表字段以及数据,现在用groovy脚本进行维护,但列已经存在,出现了列冲突该怎么办)

比如:fd_project中有一个列:is_delete,该列是使用alter table fd_project add column id_delete varchar(1) 进行添加;
但是现在想使用groovy 脚本进行维护,如下图

,但是已经存在了数据了,请问这种该怎么处理,麻烦了

image 可以用这个标签进行条件判断 如果列存在就不创建了

数据库中有那一列的数据groovy中就不再写添加那一列的配置了啊,后面需要修改字段才去groovy里面写changeSet

databaseChangeLog(logicalFilePath: '') {
    preConditions(onFail: 'WARN') {
        and {
          dbms(type: 'mysql')
          runningAs(username: 'root')
          or {
            changeSetExecuted(id: '', author: '', changeLogFile: '')
            columnExists(schemaName: '', tableName: '', columnName: '')
            tableExists(schemaName: '', tableName: '')
            viewExists(schemaName: '', viewName: '')
            foreignKeyConstraintExists(schemaName: '', foreignKeyName: '')
            indexExists(schemaName: '', indexName: '')
            sequenceExists(schemaName: '', sequenceName: '')
            primaryKeyExists(schemaName: '', primaryKeyName: '', tableName: '')
            sqlCheck(expectedResult: '') {
              "SELECT COUNT(1) FROM monkey WHERE status='angry'"
            }
            customPrecondition(className: '') {
              tableName('our_table')
              count(42)
            }
          }
        }
      }
}

求解precondition是怎么用的,昨天试了一天都没行 :joy: :joy: :joy:
databaseChangeLog(logicalFilePath: '') { preConditions(onFail: 'WARN') { and { dbms(type: 'mysql') runningAs(username: 'root') or { changeSetExecuted(id: '', author: '', changeLogFile: '') columnExists(schemaName: '', tableName: '', columnName: '') tableExists(schemaName: '', tableName: '') viewExists(schemaName: '', viewName: '') foreignKeyConstraintExists(schemaName: '', foreignKeyName: '') indexExists(schemaName: '', indexName: '') sequenceExists(schemaName: '', sequenceName: '') primaryKeyExists(schemaName: '', primaryKeyName: '', tableName: '') sqlCheck(expectedResult: '') { "SELECT COUNT(1) FROM monkey WHERE status='angry'" } customPrecondition(className: '') { tableName('our_table') count(42) } } } } }

求解一个表/列存在就不创建这样一个的例子

changeSet(author: 'zmf', id: '2019-12-12-add-project-code-type-constraint') {
        preConditions(onFail: 'MARK_RAN') {
            columnExists(tableName: "devops_env", columnName:"project_id")
            columnExists(tableName: "devops_env", columnName:"code")
            columnExists(tableName: "devops_env", columnName:"type")
            sqlCheck(expectedResult: "0", sql: """
                SELECT COUNT(1)
                FROM (SELECT 1
                FROM devops_env duplication
                WHERE duplication.project_id IS NOT NULL
                AND duplication.code IS NOT NULL
                AND duplication.type IS NOT NULL
                GROUP BY duplication.project_id, duplication.code, duplication.type
                HAVING COUNT(1) > 1) tmp""")
        }
        addUniqueConstraint(tableName: 'devops_env',
                constraintName: 'devops_env_uk_project_code_type', columnNames: 'project_id,code,type')
    }

可以到这个服务中搜索例子

https://github.com/choerodon/devops-service/blob/master/src/main/resources/script/db/groovy/devops_service/devops_env.groovy

感谢感谢,能在来一个简单点的吗 :joy: :joy: :joy: :joy: :joy: :joy:
比如就一个判断表/列不存在,就创建表/列的 :joy: :joy: :joy: :joy: :joy:
被自己给菜到 :rofl: :rofl: :rofl: :rofl: