{"id":7642,"date":"2023-03-02T13:46:24","date_gmt":"2023-03-02T08:16:24","guid":{"rendered":"https:\/\/innovationm.co\/?p=7642"},"modified":"2023-03-06T16:10:50","modified_gmt":"2023-03-06T10:40:50","slug":"liquibase","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/liquibase\/","title":{"rendered":"Liquibase"},"content":{"rendered":"<p><strong>How Liquibase Works?<\/strong><\/p>\n<p>Liquibase is used to track database changes. It is an Open Source Library. We all have worked in systems where the typical database change operation process was to write DDL, and DML scripts in SQL lines which were source-controlled, and database changes were executed by the developer or by some other team. But there wasn\u2019t really a nice way to define the sequence of these changes, it was followed as stylish practice in the design. We always had to write SQL for rollbacks as well migration to other databases was a tough task for developers.<\/p>\n<p>Liquibase tries to address all these issues in a simple way. Liquibase scripts are generally written in XML format( because XML is more readable),<\/p>\n<p>though other formats like JSON and yaml. These are also Supported scripts by Liquibase. Database changes are defined in change logs lines as small change sets which are uniquely linked by change set name or id and author. The sequence is defined in master change log tables. Rollbacks are handled by Liquibase itself in the utmost cases. And since these scripts are database individual, migrations to other databases are fairly smooth. As of now, Liquibase supports the utmost of the popular database including MySQL, Oracle, DB2, and PostgreSQL.<\/p>\n<p><strong>Add Liquibase Dependency to the project<\/strong><\/p>\n<pre>&lt;dependency&gt;\r\n\r\n\u00a0\u00a0 &lt;groupId&gt;org.liquibase&lt;\/groupId&gt;\r\n\r\n\u00a0\u00a0 &lt;artifactId&gt;liquibase-core&lt;\/artifactId&gt;\r\n\r\n\u00a0\u00a0 &lt;version&gt;4.3.2&lt;\/version&gt;\r\n\r\n&lt;\/dependency&gt;\r\n\r\n&lt;dependency&gt;\r\n\r\n\u00a0\u00a0 &lt;groupId&gt;org.liquibase&lt;\/groupId&gt;\r\n\r\n\u00a0\u00a0 &lt;artifactId&gt;liquibase-maven-plugin&lt;\/artifactId&gt;\r\n\r\n\u00a0\u00a0 &lt;version&gt;4.3.2&lt;\/version&gt;\r\n\r\n&lt;\/dependency&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Implementation of Liquibase in Database<\/strong><\/p>\n<p><strong>#liquibase<\/strong><\/p>\n<pre><strong>spring.liquibase.enabled<\/strong><strong>=<\/strong><strong>true<\/strong>\r\n\r\n<strong>spring.liquibase.change-log<\/strong><strong>=<\/strong><strong>classpath:\/db\/liquibase_master.xml<\/strong>\r\n\r\n<strong>spring.datasource.url<\/strong><strong>=<\/strong><strong>jdbc:mysql:\/\/localhost:3306\/LiqubaseTracker?createDatabaseIfNotExist=true<\/strong>\r\n\r\n<strong>spring.datasource.username<\/strong><strong>=<\/strong><strong>root<\/strong>\r\n\r\n<strong>spring.datasource.password<\/strong><strong>=<\/strong><strong>1234<\/strong>\r\n\r\n<strong>spring.jpa.database-platform<\/strong><strong>=<\/strong><strong>org.hibernate.dialect.MySQL8Dialect<\/strong>\r\n\r\n<strong>spring.datasource.driver-class-name<\/strong><strong>=<\/strong><strong>com.mysql.cj.jdbc.Driver<\/strong>\r\n\r\n<strong>spring.jpa.hibernate.ddl-auto<\/strong><strong>=<\/strong><strong>update<\/strong>\r\n\r\n<strong>spring.jpa.show-sql<\/strong><strong>=<\/strong><strong>true<\/strong><\/pre>\n<p><strong>\u00a0<\/strong><\/p>\n<p><strong>Project Structure<\/strong><\/p>\n<ul>\n<li><strong>Track database change logs<\/strong><\/li>\n<\/ul>\n<p>For this, we create a master_liquibase.xml file for every new file added and every single change we mention here to track the logs in the database<\/p>\n<p>&nbsp;<\/p>\n<pre><strong>&lt;databaseChangeLog <\/strong><strong>xmlns<\/strong><strong>=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\"<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>xmlns:<\/strong><strong>xsi<\/strong><strong>=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>xsi<\/strong><strong>:schemaLocation<\/strong><strong>=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\/dbchangelog-4.1.xsd\"<\/strong><strong>&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0 &lt;include <\/strong><strong>file<\/strong><strong>=\"db\/ddl\/DDL.xml\"<\/strong><strong>\/&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0 &lt;include <\/strong><strong>file<\/strong><strong>=\"db\/dml\/USER.XML\"<\/strong><strong>\/&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0 &lt;include <\/strong><strong>file<\/strong><strong>=\"db\/dml\/HOTEL.XML\"<\/strong><strong>\/&gt;<\/strong>\r\n\r\n<strong>&lt;\/databaseChangeLog&gt;<\/strong>\r\n\r\n<strong>\u00a0<\/strong><\/pre>\n<ul>\n<li><strong>ChangeSet Example<\/strong><\/li>\n<\/ul>\n<p><strong>\u00a0<\/strong><\/p>\n<pre><strong>&lt;changeSet <\/strong><strong>author<\/strong><strong>=\"akash.mishra\" <\/strong><strong>id<\/strong><strong>=\"041220222111\"<\/strong><strong>&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0 &lt;createTable <\/strong><strong>tableName<\/strong><strong>=\"USER\"<\/strong><strong>&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column <\/strong><strong>name<\/strong><strong>=\"ID\" <\/strong><strong>type<\/strong><strong>=\"VARCHAR(255)\"<\/strong><strong>&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;constraints <\/strong><strong>nullable<\/strong><strong>=\"false\" <\/strong><strong>primaryKey<\/strong><strong>=\"true\"<\/strong><strong>\/&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/column&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column <\/strong><strong>name<\/strong><strong>=\"NAME\" <\/strong><strong>type<\/strong><strong>=\"VARCHAR(255)\"<\/strong><strong>\/&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column <\/strong><strong>name<\/strong><strong>=\"NUMBER\" <\/strong><strong>type<\/strong><strong>=\"VARCHAR(20)\"<\/strong><strong>\/&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column <\/strong><strong>name<\/strong><strong>=\"PROFILE_IMAGE\" <\/strong><strong>type<\/strong><strong>=\"VARCHAR(20)\"<\/strong><strong>\/&gt;<\/strong>\r\n\r\n<strong>\u00a0\u00a0 &lt;\/createTable&gt;<\/strong>\r\n\r\n<strong>&lt;\/changeSet&gt;<\/strong><\/pre>\n<p>For the first time create two additional tables in the databases<\/p>\n<p>1 DatabasechangelogLock<\/p>\n<p>2 Database-changelog<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Some important rules that we have to follow<\/strong><\/p>\n<ol>\n<li>Organizing change logs As shown in the design structure over, elect a directory to store all your change log lines and define their sequence in the master change log train. Liquibase suggests organizing these lines by major interpretation but working in a multi-inventor terrain, I would recommend skipping interpretation from train names to avoid conflicts arising to inventors choosing the same performances. It&#8217;s better to choose a logical and explicatory name for these change log lines which upon first look would give some idea about the type of database changes it contains.E.g.db.changelog-add-queued-messages-table.xmldb.changelog- add- retry- column- to- queued- dispatches-table.xml<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li>Changeset id and author name: a combination of changeset id and author name uniquely identifies a change set. Changeset id should be logical and the author name should easily identify the developer who developed the change set.<\/li>\n<\/ol>\n<pre>&lt;changeSet author=\"akash.mishra\" id=\"0412\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;insert tableName=\"USER\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"ID\" value=\"1\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"NAME\" value=\"Akash\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"NUMBER\" value=\"01A\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"PROFILE_IMAGE\" value=\"Akash.jpeg\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/insert&gt;\r\n\r\n&lt;\/changeSet&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>Liquibase offers rollback for DDL statements but for all DML statements rollback has to be handled explicitly by the inventor. For illustration, the below change set of creating a hand table will produce one record in the database changelog table for this change set. For rolling back this change.<\/p>\n<p>&nbsp;<\/p>\n<pre>&lt;?xml version=\"1.1\" encoding=\"UTF-8\" standalone=\"no\"?&gt;\r\n\r\n&lt;databaseChangeLog xmlns=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xsi:schemaLocation=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\/dbchangelog-3.3.xsd\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\r\n&lt;changeSet author=\"akash.mishra\" id=\"0412\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;insert tableName=\"USER\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"ID\" value=\"1\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"NAME\" value=\"Akash\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"NUMBER\" value=\"01A\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"PROFILE_IMAGE\" value=\"Akash.jpeg\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/insert&gt;\r\n\r\n&lt;\/changeSet&gt;\r\n\r\n\u00a0\u00a0 &lt;changeSet author=\"akash.mishra\" id=\"2201221222\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;insert tableName=\"USER\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"ID\" value=\"2\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"NAME\" value=\"AkashMishra\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"NUMBER\" value=\"872838389\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;column name=\"PROFILE_IMAGE\" value=\"Akash\"\/&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/insert&gt;\r\n\r\n\u00a0\u00a0 &lt;\/changeSet&gt;\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0 &lt;rollback&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;sql&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delete from USER where ID = \"1\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/sql&gt;\r\n\r\n\u00a0\u00a0 &lt;\/rollback&gt;\r\n\r\n\r\n\r\n\r\n&lt;\/databaseChangeLog&gt;\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>How Liquibase Works? Liquibase is used to track database changes. It is an Open Source Library. We all have worked in systems where the typical database change operation process was to write DDL, and DML scripts in SQL lines which were source-controlled, and database changes were executed by the developer or by some other team. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":7643,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[722,723,839,838],"class_list":["post-7642","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile","tag-blog","tag-blogging","tag-java-liquibase","tag-liquibase"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Liquibase - InnovationM - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/liquibase\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Liquibase - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"How Liquibase Works? Liquibase is used to track database changes. It is an Open Source Library. We all have worked in systems where the typical database change operation process was to write DDL, and DML scripts in SQL lines which were source-controlled, and database changes were executed by the developer or by some other team. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/liquibase\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-02T08:16:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-06T10:40:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/03\/Liquibase.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1689\" \/>\n\t<meta property=\"og:image:height\" content=\"950\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"Liquibase\",\"datePublished\":\"2023-03-02T08:16:24+00:00\",\"dateModified\":\"2023-03-06T10:40:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/\"},\"wordCount\":479,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Liquibase.png\",\"keywords\":[\"blog\",\"blogging\",\"java liquibase\",\"liquibase\"],\"articleSection\":[\"Mobile\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/\",\"name\":\"Liquibase - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Liquibase.png\",\"datePublished\":\"2023-03-02T08:16:24+00:00\",\"dateModified\":\"2023-03-06T10:40:50+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Liquibase.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Liquibase.png\",\"width\":1689,\"height\":950},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/liquibase\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Liquibase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Liquibase - InnovationM - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innovationm.com\/blog\/liquibase\/","og_locale":"en_US","og_type":"article","og_title":"Liquibase - InnovationM - Blog","og_description":"How Liquibase Works? Liquibase is used to track database changes. It is an Open Source Library. We all have worked in systems where the typical database change operation process was to write DDL, and DML scripts in SQL lines which were source-controlled, and database changes were executed by the developer or by some other team. [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/liquibase\/","og_site_name":"InnovationM - Blog","article_published_time":"2023-03-02T08:16:24+00:00","article_modified_time":"2023-03-06T10:40:50+00:00","og_image":[{"width":1689,"height":950,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/03\/Liquibase.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"Liquibase","datePublished":"2023-03-02T08:16:24+00:00","dateModified":"2023-03-06T10:40:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/"},"wordCount":479,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/03\/Liquibase.png","keywords":["blog","blogging","java liquibase","liquibase"],"articleSection":["Mobile"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/liquibase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/","url":"https:\/\/www.innovationm.com\/blog\/liquibase\/","name":"Liquibase - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/03\/Liquibase.png","datePublished":"2023-03-02T08:16:24+00:00","dateModified":"2023-03-06T10:40:50+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/liquibase\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/03\/Liquibase.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/03\/Liquibase.png","width":1689,"height":950},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/liquibase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Liquibase"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/7642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=7642"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/7642\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/7643"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=7642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=7642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=7642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}