在DATABASECHANGELOG,liquibase 3.5.1中没有为Sybase创建DEPLOYMENT_ID

时间:2016-07-07 01:51:20

标签: sybase liquibase

使用Sybase测试Liquibase 3.5.1并发现在创建第一个表后liquibase尝试更新DATABASECHANGELOG时出现异常。

我的研究似乎表明新的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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。当3.5.1在数据库中第一次运行时,它会失败,并显示“DEPLOYMENT_ID列不存在”错误。但在第二轮比赛中,Liquibase解决了问题。我建议:

  1. 只是尝试再次运行相同的Liquibase命令。然后..
  2. https://liquibase.jira.com/
  3. 提交错误