2012-06-06 5 views
6

Ich versuche, die folgende changeSet in liquibase auszuführen, die einen Index erstellen sollte. Wenn der Index nicht existiert, sollte er stillschweigend fehlschlagen:Liquibase changeSet mit failOnError = "false" werden immer ausgeführt?

So weit, so gut. Das Problem ist, dass diese changeSet nicht in die Tabelle DATABASECHANGELOG eingeloggt wird und daher jedes Mal ausgeführt wird, wenn liquibase läuft. Gemäß der Liquibase-Dokumentation und z.B. this answer von Nathen Voxland dachte ich, dass das Changeset als in der Tabelle DATABASECHANGELOG ausgeführt werden sollte. Stattdessen wird es überhaupt nicht protokolliert und wie ich schon sagte, wird jedes Mal ausgeführt, wenn liquibase läuft (und immer wieder fehlschlägt).

bin ich etwas fehlt?

(Ich verwende MySQL als DBMS)

Antwort

3

Im answer von Nathen Voxland gegeben, empfahl er die richtigere Ansatz eine precondition der Verwendung der Zustand der Datenbank zu überprüfen, bevor der Changeset läuft.

Es scheint mir, dass das Ignorieren eines Fehlers eine schlechte Idee ist .... Bedeutet, dass Sie die Datenbankkonfiguration nicht vollständig steuern .... Der Parameter "failOnError" ermöglicht es liquibase, fortzufahren. Wäre es nicht eine schlechte Idee, wenn ein Build ein Changset als ausgeführt aufzeichnet, wenn es tatsächlich nicht war, weil ein Fehler aufgetreten ist?

+0

Ich bin völlig mit Ihnen, ist der richtige Ansatz eine Voraussetzung Verwendung auch meiner Meinung nach. Schließlich habe ich das mit meinem 'changeSet' gemacht (obwohl die Vorbedingung uniqueConstraintExists fehlt, aber das ist eine andere Tatsache). Ich stolperte über meine Erwartungen an die 'FailOnError =„false“' Attribut, und ich fragte mich, ob das beschriebene Verhalten ein Bug oder ein Feature ist;) – ebi

+1

Leider Voraussetzung für Oracle nicht-null für mich nicht funktionieren, weil die Überprüfung für Eine Spalte, für die keine Nullwerte zulässig sind, wird von liquibase nicht unterstützt. –

+0

Ich veröffentliche diese im Namen von [dev-null] (https://stackoverflow.com/users/1436741/dev-null), die diesen Kommentar als Antwort geschrieben hat; _This wird auf den Kommentar von st_jeff in der vorhergehenden Antwort relateted (aber ich habe keine 50 Ruf um einen Kommentar zu machen): Ein weiterer Anwendungsfall für FailOnError: Wenn fallen Sie eine eindeutige Einschränkung in Oracle, als der zugehörige Index nur wird droped wenn es ist neuer als die Einschränkung. Eine Drop-Index-Anweisung nach dem Löschen der Einschränkung kann je nach Alter des Index zu einem Fehler führen oder nicht._ – Bugs

Verwandte Themen