2016-05-10 8 views
0

Nehmen wir an, dass es notwendig ist, 2 Spalten zu einer Tabelle hinzuzufügen und 1 zu ändern. Aus reiner Entwurfsansicht muss ich 3 Änderungssets mit 3 verschiedenen Vorbedingungen erstellen: 2 Spalten existieren, 1 Spalte hat den falschen Typ.Gibt es eine Möglichkeit, Changeset in Liquibase zu kombinieren?

Dies ist klare Design-Ansatz, aber es führt zu 3 separaten alter Tabelle, die sehr teuer sein kann. Zum Beispiel MySql kopieren oder erstellen ganze Tabelle neu, wenn Spalte hinzugefügt oder geändert wird. Aber es erlaubt, mehrere modifizierte Aussagen zu einer zu kombinieren. Aber ein Änderungssatz muss Vorbedingungen kombinieren, was unmöglich ist - sollte ich große Änderungen vornehmen, wenn einer von ihnen wahr oder alles ist?

Gibt es also eine Möglichkeit, verschiedene Vorbedingungen zu betrachten und die alter table nur aus erfolgreichen Vorbedingungen aufzubauen?

+2

Hinweis zu den Vorbedingungen: Sie sollten sich im Allgemeinen nur auf die Changelog-Verfolgung von Liquibase verlassen, um zu wissen, ob ein ChangeSet angewendet wurde oder nicht. Vorbedingungen sind manchmal hilfreich, aber wenn Sie sich ausschließlich auf sie verlassen, um zu bestimmen, was ausgeführt werden sollte, ist es normalerweise ein "schlechter Code-Geruch", dass Datenbankänderungen nicht gut genug kontrolliert werden. Stellen Sie nur sicher, dass Sie die Vorbedingungen nur für isolierte Prüfungen verwenden, um Datenbanken wieder in Einklang zu bringen. –

Antwort

0

Wenn Sie in MySQL ein addColumn-Tag mit mehreren verschachtelten Spalten haben, wird eine einzelne ALTER TABLE-Anweisung generiert, die alle Spalten gleichzeitig hinzufügt.

Sie können mehrere Vorbedingungen in "und" und "oder" Blöcke verschachteln, so dass Sie ein changeSet haben können, das überprüft, ob Spalte1 fehlt und Spalte2 fehlt. Wenn beides der Fall ist, führen Sie addColumns mit beiden Spalten aus . Dann kann das nächste changeSet nach fehlender Spalte1 und das nächste nach fehlender Spalte2 und das nächste nach dem falschen Datentyp suchen.

Sie möchten, dass die onFail-Vorbedingungen auf "MARK_RAN" gesetzt sind, damit sie nur bei ran markiert werden und nicht bei jeder Aktualisierung fortlaufend neu bewertet werden.

+0

Kam zum selben Ansatz. – Cherry

Verwandte Themen