Problem
• Baza danychmusi być integralna podczas
developmentu.
• Jak utrzymać jej integralność?
• Jak pozbyć się problemu supportowania
developerów?
• Problem branchowania i mergeowania zmian
wprowadzanych podczas równoległego rozwoju
aplikacji.
5.
Czym jest Liquibase?
•
•
•
•
Niezależnaod bazy danych biblioteka.
OpenSource.
Dostępna z linii poleceń.
Do śledzenia i zarządzania zmianami w bazie
danych.
• Zmiany są zapisywane w plikach XML.
Format zmian
•
•
•
•
Jako plikXML
Obsługuje ponad 40 rodzajów zmian
W tym raw SQL, co jest otwartą furktą
Można uruchamiać komendy shell
http://www.liquibase.org/manual/refactoring_commands
Uruchamianie Liquibase
Możliwość uruchomieniaLiquibase z poziomu:
•
•
•
•
•
•
•
Ant
Maven
Spring Framework (jako bean w kontekście)
Grails
Servlet Listener
Command Line
Integracja z Hibernate
Instalacja
4. W bieżącymkatalogu tworzymy pusty
liquibase.properties z wpisem:
classpath=D:ProgramsLiquibase
postgresql-9.1-902.jdbc4.jar
Nadpisuje on wartości z linii poleceń, można
zmienić lokalizację za pomocą flagi -defaultsFile
http://www.liquibase.org/manual/command_line#using_a_li
quibaseproperties_file
14.
Wymagania
1. Java 1.5lub nowsza
2. Poprawnie skonfigurowany classpath oraz
JAVA_HOME
3. Tak, aby Java była dostępna z polecenia:
java -version
4. Liquibase jest uruchamiane jako archiwum
JAR:
java -jar liquibase.jar
Pierwszy zrzut bazydanych
Ograniczenia, w sposób automatyczny nie są
zrzucane:
• Procedury składowane
• Funkcje
• Triggey
• Jest możliwość wykonywania swoich zapytań
SQL, ale nie będą przenośne.
http://www.liquibase.org/manual/generating_changelogs
Nadeszły zmiany, diff
Diffnie obsługuje:
• Non-foreign key constraints (check, etc)
• Stored Procedures
• Data type length*
* Testowano: Zmiany długości varchar w
PostgreSQL są wykrywane.
27.
Nadeszły zmiany, diff
•Ważnym jest, żeby dobrze interpretować „reference”.
Z naszej perspektywy baza produkcyjna jest główną, a
rererence jest developerska.
Jeżeli odwrócimy, naturalną konsekwencją jest
wygenerowanie DROP’ów zamiast CREATE’ów.
• Umieszczanie daty i nazwy dewelopera w nazwach
plików changelogów to dobry nawyk:
2012-11-24-athlan.xml.
• Przy zbiorczych change’ach pliki te jednoznacznie są
identyfikowane nie tylko w Liquibase, ale na
repozytorium git czy SVN, można je łatwiej mergeować.
28.
Nadeszły zmiany, diff
•Raz wykonany changeSet już nigdy nie zostanie
powtórzony (identyfikowany po author oraz id).
• Nie ma poprawiania XML na repo.
29.
Tagowanie bazy danych
1.W pliku XML
<tagDatabase tag="NAZWA"/>
2. Z poziomu linii poleceń
liquibase
--url=jdbc:postgresql://…
--username postgres
--password root
tag NAZWA
Rollback
• Większość operacjima komplementarne sobie
operacje odwrotne.
• Jeżeli nie mają, lub chcemy podjąć inne akcje,
do changeset’a dodajemy tag <rollback>
• Są zapisywane w bazie danych.
Preconditions
Warunki, które musząbyć spełnione, aby nastąpił
cały zestaw changeset’ów lub pojedynczy z nich.
Przydają się, gdy:
• Osoba przygotowująca changelog ma jakieś
założenia.
• Zapewnia ich przestrzealność.
• Umożliwia sprawdzenie danch, bądź
parametrów.
• Decyduje, które chengesety są uruchamiane, a
które nie.