2016-05-27 5 views
-1

Ich verwende Liquibase für die Datenmigration.Liquibase ändert den Spaltentyp von Date zu DateTime, ohne die enthaltenen Werte zu löschen

Ich habe eine Tabelle namens Dokument, die bereits Werte enthält.

Meine Tabelle Dokument enthält Spalten (id, name, dueDate). Die Spalte "dueDate" ist vom Typ "Date" und ich möchte seinen Typ von "DATE" in "DATETIME" ändern.

Ich habe die folgende Strategie angenommen

1- eine neue Spalte duedatenew vom Typ

2- Kopie Werte aus der Spalte duedate

3- Spalte duedate duedatenew DATETIME- erstellen löschen

4 - Umbenennungsspalte duedatenneu zu duedate

wie im folgenden Änderungssatz beschrieben

Die Ausführung des Änderungssatzes schlägt jedoch immer während des zweiten Schritts fehl. Die Kopie der Daten schlägt immer fehl.

Wie kann ich das bitte lösen?

Antwort

1

Ich beobachtete die column docs ... Es scheint, dass valueComputed auf eine SQL-Funktion zeigen sollte, so dass eine SELECT-Abfrage wird nicht funktionieren ...

Aber nach this, Ihre beste Möglichkeit ist, zu verwenden die sql Tag das Update, wie Ihr wünschen auszuführen ... Beispiel:

<changeSet id="task-99" author="blaise"> 
    <addColumn tableName="document"> 
     <column name="duedatenew" type="DATETIME" /> 
    </addColumn> 
    <sql>update document set duedatenew = duedate</sql> 
    <dropColumn tableName="document" columnName="duedate" /> 
    <renameColumn tableName="document" oldColumnName="duedatenew" 
    newColumnName="duedate" /> 
</changeSet> 
+0

dank Carlitos für deine Antwort. Die Lösung, die Sie vorgeschlagen haben, ist, was ich zuerst angenommen habe und es funktioniert. aber ich wollte eine Möglichkeit, Liquibase-Tags zu verwenden, ohne sql zu schreiben. In der Tat arbeite ich in einer Firma, deren eines der Prinzipien darin besteht, Codes zu schreiben, die nicht von irgendeiner Datenbank abhängen, weil wir ORM für das Java Objekt-Mapping verwenden. Daher sollten unsere Codes auf jedem SGBD funktionieren. Deshalb vermeiden wir es, spezifische SQL-Codes zu schreiben. also wollte ich einen Weg, nur liquibase Tags in meinem ChangeSet zu verwenden, um dieses Problem zu lösen. Danke für Ihre Antwort. bitte wissen Sie einen Weg, um diese sql zu vermeiden? – blaiso

+1

Nicht wirklich (und ich denke, Sie können nicht), @blaiso ... Allerdings, wenn Sie SQL-Standard schreiben, sehe ich nicht, warum Sie nicht das SQL-Tag verwenden können (mit SQL-Standard verletzen Sie nicht Ihre Firma Prinzipien) ... Würde es Ihnen etwas ausmachen, meine Antwort als richtig zu akzeptieren? Vielen Dank! –

+0

OK, Vielen Dank Carlitos für deine Antwort – blaiso

Verwandte Themen