2017-10-12 21 views
0

J'utilise Liquibase 3.5.3 pour créer une vue dans DB2 LUW 11.0. J'ai défini la propriété "replaceIfExists" sur true et lors de l'exécution, elle m'a donné une erreur "replaceIfExists is not allowed on db2".Création d'une vue dans DB2 LUW avec Liquibase

Je sais que officiellement cette propriété n'est pas supportée par DB2 dans Liquibase mais la base de données api le permet (j'exécute manuellement le script sql avec create ou replace et fonctionne bien).

Il existe une solution de contournement pour exécuter ces scripts dans DB2 ou peut-être pouvez-vous implémenter cette fonctionnalité?

Exemple:

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

Certaines versions de Db2 sur certaines plates-formes prennent en charge la syntaxe 'créer ou remplacer une vue'. Tant que LUW (supérieur à v9.5) et i-series (supérieur à 6.1) supportent cette syntaxe, le Db2 pour Z/OS ne le fait pas (à la version 12). Donc, si la liquibase devait être changée, elle devrait savoir (ou détecter dynamiquement) quelles versions/plateformes supportent la syntaxe. Peut-être engager avec liquibase.jira.com? – mao

Répondre

1

Je mettrais ce script dans un fichier puis d'inclure le fichier à partir de liquibase avec le runOnChange="true" pour le changeSet

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

En raison de la runOnChange, Liquibase comprendra une somme de contrôle du fichier SQL réel et ne l'exécutera que si la définition de la vue a changé.

Une autre option consiste à utiliser runAlways="true" à la place, puis la vue sera recréée chaque fois que vous exécutez Liquibase. Cela serait nécessaire pour prendre automatiquement en compte les changements dans les tables sous-jacentes.