A view is a virtual table
in SQL that is created by the result of an SQL query
. view contains rows and columns, the same as a table.
viewExists
is a type of Precondition
provided by Liquibase
. It checks that index
should exist in the table
.
<?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:pro="http://www.liquibase.org/xml/ns/pro" 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/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet author="wesome" id="1693111591793-1">
<createTable catalogName="appledb" tableName="apple">
<column name="apple_id" type="BIGINT">
<constraints unique="true" primaryKey="true" />
</column>
<column name="apple_name" type="VARCHAR(20)" />
</createTable>
</changeSet>
<changeSet author="wesome" id="1693111591793-2">
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="1" />
<column name="apple_name" value="Macintosh" />
</insert>
</changeSet>
<changeSet author="wesome" id="1693111591793-3">
<createView catalogName="appleDb" remarks="Apple table view" replaceIfExists="true" schemaName="appleDb" viewName="apple_view">
select apple_id, apple_name from apple where apple_id = 1
</createView>
</changeSet>
<changeSet author="wesome" id="1693111591793-4">
<preConditions>
<viewExists viewName="apple_view" schemaName="appleDb" />
</preConditions>
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="2" />
<column name="apple_name" value="Fuji" />
</insert>
</changeSet>
</databaseChangeLog>
liquibase.properties (update changeLog File file format with SQL, XML, YAML, JSON as per changelog.mysql.)
changeLogFile=changelog.mysql.xml
liquibase.command.url:jdbc:mysql://localhost:3306/appleDb?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
liquibase.command.username : root
liquibase.command.password : rootroot
Precondition with a custom message
viewExists
fails the ChangeSet
if Precondition
is not matched, so onFailMessage
can be used to provide a custom message.
<?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:pro="http://www.liquibase.org/xml/ns/pro" 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/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet author="wesome" id="1693111591793-1">
<createTable catalogName="appledb" tableName="apple">
<column name="apple_id" type="BIGINT">
<constraints unique="true" primaryKey="true" />
</column>
<column name="apple_name" type="VARCHAR(20)" />
</createTable>
</changeSet>
<changeSet author="wesome" id="1693111591793-2">
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="1" />
<column name="apple_name" value="Macintosh" />
</insert>
</changeSet>
<changeSet author="wesome" id="1693111591793-3">
<createView catalogName="appleDb" remarks="Apple table view" replaceIfExists="true" schemaName="appleDb" viewName="apple_view">
select apple_id, apple_name from apple where apple_id = 1
</createView>
</changeSet>
<changeSet author="wesome" id="1693111591793-4">
<preConditions onFailMessage="a view name apple_view should exist in appleDb">
<viewExists viewName="apple_view" schemaName="appleDb" />
</preConditions>
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="2" />
<column name="apple_name" value="Fuji" />
</insert>
</changeSet>
</databaseChangeLog>
liquibase.properties (update changeLog File file format with SQL, XML, YAML, JSON as per changelog.mysql.)
changeLogFile=changelog.mysql.xml
liquibase.command.url:jdbc:mysql://localhost:3306/appleDb?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
liquibase.command.username : root
liquibase.command.password : rootroot