2017-10-12 2 views
0

Ich verwende Liquibase 3.5.3, um eine Sicht in DB2 LUW 11.0 zu erstellen. Ich setze "replaceIfExists" -Eigenschaft auf True und zur Laufzeit gibt es mir einen Fehler "replaceIfExists ist nicht auf db2 zulässig".Erstellen von Sicht in DB2 LUW mit Liquibase

Ich weiß, dass diese Eigenschaft offiziell nicht für DB2 in Liquibase unterstützt wird, aber die Datenbank API erlaubt es (ich manuell ausführen SQL-Skript mit erstellen oder ersetzen und funktioniert gut).

Es gibt einige Problemumgehungen, um diese Skripts in DB2 auszuführen, oder können Sie diese Funktion möglicherweise implementieren?

Beispiel:

CREATE OR REPLACE myView AS (
    SELECT * FROM myTable 
) 
+1

Einige Versionen von Db2 auf einigen Plattformen unterstützen die Syntax "create or replace view". Während sowohl LUW (höher als v9.5) als auch i-Serie (höher als 6.1) diese Syntax unterstützen, funktioniert das Db2 für Z/OS nicht (Version 12). Wenn also Liquibase geändert werden sollte, müsste es wissen (oder dynamisch erkennen), welche Versionen/Plattformen die Syntax unterstützen. Vielleicht engagieren Sie sich mit liquibase.jira.com? – mao

Antwort

1

ich das Skript in eine Datei setzen würde und schließen Sie dann die Datei aus Liquibase mit dem runOnChange="true" für das Changeset

<changeSet author="arthur.dent" id="42" runOnChange="true"> 
    <sqlFile path="create_view.sql" 
      encoding="UTF-8" 
      relativeToChangelogFile="true" 
      stripComments="false" 
      splitStatements="false"/> 
</changeSet> 

Wegen der runOnChange, Liquibase gehören eine Prüfsumme der eigentlichen SQL-Datei und führt sie nur aus, wenn sich die Definition der Ansicht geändert hat.

Eine andere Option ist stattdessen die Verwendung von runAlways="true" und dann wird die Ansicht jedes Mal neu erstellt, wenn Sie Liquibase ausführen. Dies wäre notwendig, um Änderungen in der/den zugrunde liegenden Tabelle (n) automatisch zu übernehmen.

Verwandte Themen