2016-07-07 3 views
0

Testen Sie einfach Liquibase 3.5.1 mit Sybase und finde, dass ich eine Ausnahme bekomme, nachdem meine erste Tabelle erstellt wurde und liquibase versucht, das DATABASECHANGELOG zu aktualisieren.DEPLOYMENT_ID nicht für Sybase in DATABASECHANGELOG erstellt, liquibase 3.5.1

Meine Forschung scheint darauf hinzudeuten, dass die neue DEPLOYMENT_ID Spalte nicht in der CreateDatabaseChangeLogTableGeneratorSybase hinzugefügt wird

@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. 

Die Tabelle, die in der Tat erstellt bekommt fehlt 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) 
); 

Die Ausnahme, die ich bin bekommen:

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 

Antwort

0

Ich habe das gleiche ist verklagen. Wenn 3.5.1 zum ersten Mal in einer Datenbank ausgeführt wird, schlägt es mit einem Fehler "Spalte DEPLOYMENT_ID existiert nicht" fehl. Aber beim zweiten Durchlauf repariert sich Liquibase selbst. Ich würde vorschlagen:

  1. Versuchen Sie einfach, den gleichen Liquibase-Befehl erneut auszuführen. Dann ..
  2. einen Fehler Datei zu https://liquibase.jira.com/
+0

Ich hob: https://liquibase.jira.com/browse/CORE-2818 Ich habe meine gepatchte Version des Generators Klasse, mit der ich bin kann jetzt als Workaround ausgeführt werden. und nur einen weiteren Fehler im Zusammenhang mit 3.5.1 und Sybase gefunden und ausgelöst: https://liquibase.jira.com/browse/CORE-2819 – consultantleon

Verwandte Themen