2016-07-07 32 views
0

只需使用Sybase测试Liquibase 3.5.1,并发现我在创建第一个表后发现异常,并且liquibase尝试更新DATABASECHANGELOG。DEPLOYMENT_ID不是为DATABASECHANGELOG中的Sybase创建的,liquibase 3.5.1

我的研究似乎表明,新的DEPLOYMENT_ID列未在CreateDatabaseChangeLogTableGeneratorSybase

@Override 
    public Sql[] generateSql(CreateDatabaseChangeLogTableStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) { 
     return new Sql[] { 
       new UnparsedSql("CREATE TABLE " + database.escapeTableName(database.getLiquibaseCatalogName(), database.getLiquibaseSchemaName(), database.getDatabaseChangeLogTableName()) + " (ID VARCHAR(150) NOT NULL, " + 
       "AUTHOR VARCHAR(150) NOT NULL, " + 
       "FILENAME VARCHAR(255) NOT NULL, " + 
       "DATEEXECUTED " + DataTypeFactory.getInstance().fromDescription("datetime", database).toDatabaseDataType(database) + " NOT NULL, " + 
       "ORDEREXECUTED INT NOT NULL, " + 
       "EXECTYPE VARCHAR(10) NOT NULL, " + 
       "MD5SUM VARCHAR(35) NULL, " + 
       "DESCRIPTION VARCHAR(255) NULL, " + 
       "COMMENTS VARCHAR(255) NULL, " + 
       "TAG VARCHAR(255) NULL, " + 
       "LIQUIBASE VARCHAR(20) NULL, " + 
       "CONTEXTS VARCHAR(255) NULL, " + 
       "LABELS VARCHAR(255) NULL, " + 
       "PRIMARY KEY(ID, AUTHOR, FILENAME))", 
         getAffectedTable(database)) 
     }; //To change body of implemented methods use File | Settings | File Templates. 

,它获得创建该表添加确实缺少DEPLOYMENT_ID:

DROP TABLE dbo.MCH_DATABASE_CHANGE_LOG; 

CREATE TABLE dbo.DATABASECHANGELOG 
(
    ID    varchar(150) NOT NULL, 
    AUTHOR   varchar(150) NOT NULL, 
    FILENAME  varchar(255) NOT NULL, 
    DATEEXECUTED datetime  NOT NULL, 
    ORDEREXECUTED int   NOT NULL, 
    EXECTYPE  varchar(10) NOT NULL, 
    MD5SUM   varchar(35), 
    DESCRIPTION varchar(255), 
    COMMENTS  varchar(255), 
    TAG   varchar(255), 
    LIQUIBASE  varchar(20), 
    CONTEXTS  varchar(255), 
    LABELS   varchar(255) 
); 

我是例外得到:

Caused by: liquibase.exception.DatabaseException: Invalid column name 'DEPLOYMENT_ID'. 
[Failed SQL: INSERT INTO [dbo].[MTA_DATABASE_CHANGE_LOG] ([ID], [AUTHOR], [FILENAME], [DATEEXECUTED], [ORDEREXECUTED], [MD5SUM], [DESCRIPTION], [COMMENTS], [EXECTYPE], [CONTEXTS], [LABELS], [LIQUIBASE], [DEPLOYMENT_ID]) VALUES ('create-message-table', 'TAA.team', 'com/mcorp/tools/integration/persistence/liquibase/MTA.db.changelog-create.xml', GETDATE(), 1, '7:7fd70289c6cfc92aa9a8b2206743f4bf', 'createTable tableName=MTA_MESSAGES; sql', '', 'EXECUTED', 'table', NULL, '3.5.1', '7855321615')] 
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:301) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:107) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:97) 
    at liquibase.changelog.StandardChangeLogHistoryService.setExecType(StandardChangeLogHistoryService.java:341) 
    at liquibase.database.AbstractJdbcDatabase.markChangeSetExecStatus(AbstractJdbcDatabase.java:1134) 
    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:62) 
    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:79) 
    at liquibase.Liquibase.update(Liquibase.java:214) 
    at liquibase.Liquibase.update(Liquibase.java:192) 
    at liquibase.Liquibase.update(Liquibase.java:188) 
    at com.mcorp.tools.integration.persistence.liquibase.LiquibaseExecutor.execute(LiquibaseExecutor.java:195) 
    ... 34 more 
Caused by: java.sql.SQLException: Invalid column name 'DEPLOYMENT_ID'. 

    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372) 
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2893) 
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2335) 
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:638) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:613) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:572) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeImpl(JtdsStatement.java:809) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.execute(JtdsStatement.java:1282) 
    at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:264) 
    at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:264) 
    at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:264) 
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:299) 
    ... 45 more 

回答

0

我有同样的是起诉。当3.5.1在数据库中第一次运行时,它会失败并显示“列DEPLOYMENT_ID不存在”错误。但是第二次运行Liquibase修复了它自己。我建议:

  1. 只是尝试再次运行相同的Liquibase命令。然后..
  2. 文件中的错误,以https://liquibase.jira.com/
+0

我提出: https://liquibase.jira.com/browse/CORE-2818 我说我修补的生成器类与我的版本现在可以作为解决方法运行。 ,刚刚发现了另一个与3.5.1和Sybase相关的bug,并提出: https://liquibase.jira.com/browse/CORE-2819 – consultantleon

相关问题