2017-02-25 4 views
0

Ich habe eine lange Reihe von Liquibase Changesets. Einer von ihnen erstellt eine MySQL-Prozedur, und ich habe gerade herausgefunden, dass diese Prozedur nicht erstellt wird und das ganze liquibase-Skript folglich auf MySQL scheitern wird, wenn keine spezielle MySQL-Option gesetzt ist (log_bin_trust_function_creators = 1).Korrigieren eines Fehlers in Liquibase-Skript

Jetzt ist das Changeset, das dieses Verfahren erstellt hat, tief in der Geschichte. Was ist der richtige Ansatz, um es zu ändern? Das Hinzufügen eines neuen Changesets, das die Prozedur reparieren würde, hilft nicht, da die gesamte Verarbeitung auf der alten fehlschlägt. Ich habe ungefähr 100 Server mit Datenbanken, die von diesem liquibase-Skript verwaltet werden. Ich muss sie eigentlich nicht reparieren, ich muss nur das Skript ändern (aus Gründen der zukünftigen Server) und nicht die bestehenden Server brechen, wenn sie das nächste Mal liquibase aktualisiert.

Antwort

0

Sie können den Code des vorhandenen (ungültigen) Changeset in einen korrekten ändern und runOnChange = "true" in sein Attribut einfügen. Wenn es also auf einen neuen Server angewendet wird, wird die korrekte Prozedur von Anfang an angewendet. und wenn Sie es auf den alten Server anwenden, wird es nur behoben werden?

+0

Nun, die Prozedur existiert bereits auf dem alten Server, also wird der Versuch, sie neu zu erstellen, zu einem Fehler führen, oder? –

+0

Können Sie nicht 'erstellen oder ersetzen' in SQL-Prozedur, so wird es nur bestehende ersetzen? – dbf

+0

Der "or replace" Modifier scheint nicht mit Funktionen und Verfahren zu arbeiten, nach der Dokumentation von mysql 5.7 –

Verwandte Themen