2014-04-08 15 views
7

W moim bieżącym projekcie istnieje zespół DB, który sprawdza wszystkie skrypty przed zastosowaniem ich do produkcji.Liquibase - generuj skrypt bez stosowania zestawów zmian do bazy danych

Używamy Liquibase do zastosowania zestawów zmian do rozwoju, ale do produkcji musimy być w stanie wygenerować plik * .sql ze wszystkimi instrukcjami.

Zgodnie z dokumentacją wtyczki typu physibase-maven, updateSQL powinien być tym, czego chcę: http://www.liquibase.org/documentation/maven/maven_updatesql.html.

Więc stworzyłem dwa profile maven. Jeden do zastosowania zmian w lokalnej bazie danych programowania (za pomocą liquibase: update) i jednej innej, która po prostu wygeneruje skrypt. Problem polega na tym, że: doing liquibase: updateSQL generuje plik * .sql (zgodnie z oczekiwaniami), ale próbuje także połączyć się z bazą danych i zastosować zmiany (nieoczekiwane). Wierzę, że dokumentacja updateSQL prowadzi do błędu, jak mówi:

Generuje SQL, które są wymagane w celu aktualizacji bazy danych do aktualnej wersji, jak określono w DatabaseChangeLogs.

Nie wspomina o tym, że faktycznie zastosowałby zestawy zmian, takie jak liquibase: update does.

Możliwe, że nie rozumiem dokumentacji tutaj, ale nie powinienem aktualizowaćSQL generować sql lub powinien on rzeczywiście zaktualizować + wygenerować sql?

Oto moja konfiguracja wtyczki:

<plugin> 
    <groupId>org.liquibase</groupId> 
    <artifactId>liquibase-maven-plugin</artifactId> 
    <version>3.0.5</version> 
    <configuration> 
     <changeLogFile>src/main/resources/db/liquibase_changeset.xml</changeLogFile> 
     <driver>oracle.jdbc.driver.OracleDriver</driver> 
     <url>${liquibase.db.url}</url> 
     <username>${liquibase.db.user}</username> 
     <password>${liquibase.db.password}</password> 
     <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>process-resources</phase> 
      <goals> 
       <goal>${liquibase.exec.goal}</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

I utworzeniu profili lubi to:

<profiles> 
    <profile> 
     <id>local</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <liquibase.exec.goal>update</liquibase.exec.goal> 
      <liquibase.exec.prompt>false</liquibase.exec.prompt> 
      <liquibase.db.url>jdbc:oracle:thin:@host:1521:xe</liquibase.db.url> 
      <liquibase.db.user>user</liquibase.db.user> 
      <liquibase.db.password>password</liquibase.db.password> 
     </properties> 
    </profile> 

    <profile> 
     <id>uat</id> 
     <properties> 
      <liquibase.exec.goal>updateSQL</liquibase.exec.goal> 
      <liquibase.exec.prompt>true</liquibase.exec.prompt> 
      <liquibase.db.url>jdbc:oracle:thin:@host2:1521:xe</liquibase.db.url> 
      <liquibase.db.user>user2</liquibase.db.user> 
      <liquibase.db.password>password2</liquibase.db.password> 
     </properties> 
    </profile> 
</profiles> 

Biorąc pod uwagę mój Maven config i moje zrozumienie, ja spodziewałbym

mvn install -P uat 

do generuje tylko skrypt i nie próbuje połączyć się z bazą danych.

Fakt, że jestem zmuszony do określania właściwości db (sterownika itp.) Sprawia, że ​​wierzę, że ma to na celu zawsze zmienić bazę danych, ale przypuszczam, że powinno być możliwe wygenerowanie skryptu bez próby zastosowania zmian baza danych.

Jakieś myśli? Czy to możliwe, ale jestem na złej drodze? A może brakuje mi jakiejś prostej własności? Lub po prostu nie jest w ogóle obsługiwany?

Z góry dziękuję.

Odpowiedz

8

UpdateSQL tak naprawdę nie aktualizuje bazy danych, po prostu wyprowadza SQL.

Powód, dla którego potrzebuje informacji o połączeniu z bazą danych i nawiązuje rzeczywiste połączenie, ponieważ musi wybrać z tabeli dzienników bazy danych, aby określić, które zmiany zostały uruchomione, a które nie.

+0

Mieliśmy tylko czas, aby ponownie się temu przyjrzeć. Głupie mnie, to ma sens! Dzięki – redwulf

+1

Uwaga: Jeśli nie chcesz żadnej interakcji z bazą danych, jest teraz tryb offline http://www.liquibase.org/documentation/offline.html –

Powiązane problemy