我们开始在弹簧靴上使用liquibase进行应用。其中一个要求使用普通的sql来进行liquibase。我们有许多用于初始化数据库的sql文件。我查看了文档https://www.liquibase.org/documentation/sql_format.html但未找到信息如何创建更改日志sql文件的层次结构。等待单个文件的Spring引导属性liquibase.change-log
。我尝试将文件名分隔,
或;
所有时间从spring-boot 获取错误找不到更改日志位置...
所以我的问题:
如何以" sql格式声明执行另一个或多个文件" ??
与xml等价物相同:
<include file="second_changelog.sql"/>
<include file="third_changelog.sql"/>
没有成功的例子first_changelog.sql
:
--liquibase formatted sql
--changeset author_1:1
UPDATE [dbo].[customers] SET name='HD_1' WHERE id = '11';
--import file=second_changelog.sql
--import file=third_changelog.sql
PS。请不要建议xml,因为我只需要SQL
答案 0 :(得分:3)
所以,
似乎您不想使用一个大的格式化SQL更改日志,其中每个更改集都写在文件中。相反,如果您想要使用单独的SQL文件(使用纯SQL),则需要一个只触及一次的更改日志,如下所示:
<changeLog><includeAll path="/path/to/your/sql/directory"></changeLog>
使用includeAll
告诉Liquibase将您指向的目录中的所有SQL文件拉入,就像它们是单独的changeSet一样。请参阅:http://www.liquibase.org/2015/09/liquibase-without-changelogs.html
P.S。:根据您的项目,您可能需要查看Datical - 这是一个基于Liquibase构建的商业解决方案,使这一切变得更加容易。您只需要将SQL文件签入到源代码控制中,而Datical有一个代码打包器,可以验证并生成数据库更改的不可变工件。您可以完全放弃管理changeLog的业务。
答案 1 :(得分:2)
您可以使用一个XML文件,其中包含对plain sql的多个引用(有关详细信息,请参阅)
示例:
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.3.xsd">
<changeSet id="init" author="author">
<sqlFile encoding="utf8" path="first_changelog.sql"/>
<sqlFile encoding="utf8" path="second_changelog.sql"/>
</changeSet>
答案 2 :(得分:0)
功能请求仍处于打开状态,解决方案为“尚无计划” 请检查以下链接以获取更多讨论: http://forum.liquibase.org/topic/can-we-include-a-file-in-rollback
Jira中的功能请求ID: https://liquibase.jira.com/browse/CORE-1637
答案 3 :(得分:0)
我使用以下结构,@Yuriy的Answer将以sql文件作为更改集(而不是sql文件中定义的更改集)。
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.3.xsd">
<include file="changelog.sql"/>
<include file="changelog2.sql"/>
</databaseChangeLog>
进一步的changelog.sql如下所示。这种方式liquibase也考虑了SQL变更集。
--liquibase formatted sql
--changeset nvoxland:1
CREATE TABLE department_1
(
DeptID int NOT NULL PRIMARY KEY CLUSTERED
, DeptName varchar(50) NOT NULL
, ManagerID INT NULL
, ParentDeptID int NULL
, SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL
, SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL
, PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING = ON)
;
--rollback drop table department_1;
答案 4 :(得分:0)
使用主XML文件从多个文件加载sql变更集。
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<includeAll path="sql/"/>
</databaseChangeLog>
现在,您可以将所有.sql文件存储在 sql 目录中。即使是它也会从子目录中读取。