DEPLOYMENT_ID не создан для Sybase в DATABASECHANGELOG, Liquibase 3.5.1

Просто протестируйте Liquibase 3.5.1 с Sybase и обнаружите, что получаю исключение после создания моей первой таблицы и попытки 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

person consultantleon    schedule 07.07.2016    source источник


Ответы (1)


У меня такая же проблема. При первом запуске 3.5.1 в базе данных происходит сбой с ошибкой «столбец DEPLOYMENT_ID не существует». Но при втором запуске Liquibase исправляется. Я бы посоветовал:

  1. Просто попробуйте снова запустить ту же команду Liquibase. Потом..
  2. Отправьте сообщение об ошибке на https://liquibase.jira.com/.
person M.Kyraha    schedule 07.07.2016
comment
Я поднял: liquibase.jira.com/browse/CORE-2818 Я добавил исправленный версия класса генератора, с которой я теперь могу работать в качестве обходного пути. и только что обнаружил еще одну ошибку, связанную с 3.5.1 и Sybase, и поднял: liquibase.jira.com/browse / CORE-2819 - person consultantleon; 09.07.2016