liquibase-readme
Structure within ADITO
in theory
When using liquibase in an ADITO-System, your project structure should look like this:
PROJECTHOME/others/db_changes/masterChangelog.xml PROJECTHOME/others/db_changes/struct/ PROJECTHOME/others/db_changes/data/ PROJECTHOME/others/db_changes/misc/ PROJECTHOME/others/db_changes/liquibase.properties
The file masterChangelog.xml
contains a list of all changes (well, in fact more like a list of all changelog-files). The structure could look like this:
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<include file="struct/create_org.xml"/>
<include file="data/example_org.xml"/>
</databaseChangeLog>
Keep in mind that the header-information can change, visit therefore the liquibase-website: http://www.liquibase.org Specific: the XML-format definition: http://www.liquibase.org/documentation/xml_format.html |
So, that’s where all our changes are located - but what about the changes itself?
As you can think of, they’re stored in files located in the folders struct
for DDL-stuff like create, alter etc.
and data
for DML-stuff like insert, update etc.
If you want to know what to do add in these files take a look at the official liquibase documentation for further information how to fill these XML files: http://www.liquibase.org/documentation/index.html
Always remember that you might have to define some rollback-entries. This is e.g. not needed for create-entries but for others like insert. |
So, whats about that liquibase.properties
file? The file is needed to specify some data here, e.g. the driver-name, classpath (of the driver), jdbc-url, etc.
You want to store these information there because otherwise you’d need to specify them on every call of liquibase. Not cool.
Now you’re ready to run commands like liquibase update
in the PROJECTHOME/others/db_changes
folder.
in practice
FOOBAR
with some demo-data. We need to:-
create a new file in the struct-folder; e.g.
create_FOOBAR.xml
-
fill the file with changesets that will create a table
-
add
include
-tag in themasterChangelog.xml
for the created file -
create a new file in the data-foler; e.g.
demoData_FOOBAR.xml
-
fill the file with changesets that will insert data into the table and define rollback-entries
-
add
include
-tag in themasterChangelog.xml
for the created file -
to apply the changes simply run
liquibase update
For example one feature package "add contact management" could contain several files itself:
create_org.xml create_pers.xml create_relation.xml
On the other hand, several feature packages cannot be contained in one changelog-file.
How to use it
Normally everything you need is provided by the project-template and the existing files in the git-repository. Therefore it’s easy to use and you can start immediately.
-
run
liquibase update
to apply possible changes after merging something into your repository -
apply modifications on the database always with liquibase; do not write a create-script in SQL. Write some changesets and execute them
-
set correct
author
- andid
-attributes in your changelog-files
FAQ
-
What about unicode-columns like
NVARCHAR
orNCLOB
?Simply define them in your changesets. They are prefered over non-unicode-datatypes
-
What if i switch between branches and want to switch between different database-states?
This is something that needs to be defined. Possible ways: rollback or recreate your database entirely
-
Is it possible to write an update-changeset where I can use a preparedStatement in the where-clause?
This needs to be analyzed and (the result) added here.
have a nice day :-)