2012-03-28 14 views
2

Gibt es bei Verwendung von Liquibase eine Möglichkeit, vorhandene Daten zu verwenden, um einige der Daten zu generieren, die eingefügt werden sollen?Verwenden Sie vorhandene Daten mit Liquibase?

Zum Beispiel sagen, dass ich eine Zeile mit ID 5 aktualisieren möchte, aber ich weiß nicht vorne, dass die ID 5 sein wird, da dies mit einer anderen Tabelle verknüpft ist, wo ich tatsächlich die ID bekommen werde von. Gibt es eine Möglichkeit für mich, Liquibase mitzuteilen, die ID aus der SELECT-Abfrage zu bekommen?

Ich denke, das ist nicht wirklich möglich, da ich das Gefühl habe, Liquibase ist wirklich für einen sehr strukturierten nicht-dynamischen Ansatz konzipiert, aber es tut nicht weh zu fragen.

Danke.

Antwort

2

Es ist möglich, schreiben Sie Ihre eigenen custom refactoring class um SQL zu generieren. Die Funktionalität unterstützt die Generierung von statischem SQL basierend auf den Changeset-Parametern.

Also ... es ist möglich, eine Verbindung zur Datenbank zu erhalten, aber die mit diesem Ansatz verbundene Warnung besagt, dass das generierte SQL dynamisch ist (Ihre Daten könnten sich ändern) und fest an Ihre Datenbankinstanz gebunden ist.

Ein Beispiel für Probleme, die dies verursachen, ist die Unfähigkeit, ein SQL-Upgrade-Skript für einen DBA zu generieren, der für eine Produktionsdatenbank ausgeführt wird.

Ich habe seit einiger Zeit über diesen Anwendungsfall nachgedacht. Ich weiß immer noch nicht, ob Liquibase die beste Lösung für dieses Datenverwaltungsproblem ist oder ob es mit einem zusätzlichen Tool wie dbunit kombiniert werden muss.

4

Sie können die integrierten Änderungen nicht verwenden, um Daten basierend auf vorhandenen Daten einzufügen. Sie können das Tag jedoch mit insert-Anweisungen mit geschachtelten Auswahlelementen verwenden.

Zum Beispiel:

<changeSet> 
    <sql>insert into person (name, manager_id) values ('Fred', (select id from person where name='Ted'))</sql> 
</changeSet> 

Hinweis: Die SQL (und Unterstützung für Insert + select) ist abhängig von Datenbankanbietern.

Verwandte Themen