2014-05-12 1 views
6

Ich habe eine Datenbank mit Ansichten und gespeicherten Prozeduren, die oft geändert werden müssen. Ich würde gerne in der Lage sein, diese Ansichten in einem anderen Verzeichnis zu speichern und den SQL-Code einzuschließen, wenn ich eine Migration schreibe. Grundsätzlich wäre die dir StrukturExterne Sql von einer Migration von Flugwegen aufrufen

views/ 
    my_view.sql 
functions/ 
    my_func.sql 
sql/ 
    V1__add_view.sql 

Und V1__add_view.sql wäre so etwas wie

\i views/my_view.sql 

werden, die zur Zeit in psql arbeiten, aber nicht in flyway Migrationen. Der Vorteil besteht darin, dass wir die Ansicht ändern und in die nächste Migration einbeziehen können, wenn wir Änderungen vornehmen möchten. Es würde auch eine große Menge an Copy-Paste in View-Migrationen eliminieren.

Gibt es eine Möglichkeit, externe SQL-Skripts in eine Migration von Flyways einzubinden?

+0

Haben Sie jemals herausgefunden? Ich bin auch aus einem anderen Grund an so etwas interessiert: eine große Anzahl von Erstellungsskripten und wie sie bestellt sind. Die aktuelle Anleitung von [Tomasz] (http://stackoverflow.com/users/605744/tomasz-nurkiewicz) besteht darin, die inkrementellen Versionsnummern _per file_ zu verwenden, um die Reihenfolge zu erzwingen - was meiner Meinung nach die Lesbarkeit und Auffindbarkeit verringert. Ich hätte gerne ein einziges "Version" -Migrationsskript, in dem die enthaltenen Skripte verwendet werden, in der richtigen Reihenfolge. – rbellamy

Antwort

1

Es klingt, als könnten Sie dies unter Verwendung von Repeatable migrations erreichen.

Ich glaube nicht, dass flyway das Aufrufen externer Skripte wie eine Anweisung unterstützt. Wenn Sie die importierende Route ausprobieren möchten, können Sie Platzhalter für Ihre Skripts verwenden.

Ihr Beispiel, verwenden Sie den Platzhalter in der SQL-Migrationsdatei

${my_view} 

Wenn Sie anrufen flyway definiert den Platzhalter Wiederbeschaffungswert mit dem Text von Ihren Ansichten/my_view.sql. Ich bin mir nicht sicher, was Sie verwenden flyway zu nennen, aber in ant würde es so etwas wie

<loadfile property="flyway.placeholder" srcfile="views\my_view.sql"/> 
<flyway:migrate> 
    <locations> 
     <location path="database/migrations"/> 
    </locations> 
    <placeholders> 
     <placeholder name="my_view" value="${flyway.placeholder}"/> 
    </placeholders> 
</flyway:migrate> 

Die Dokumentation ist auch ein Beispiel: https://flywaydb.org/documentation/ant/migrate

+0

Bearbeitet, um eine wiederholbare Migration vorzuschlagen (R__add_my_view.sql anstelle von V1__add_view.sql) – fishy

Verwandte Themen