正在使用的 liquibase 版本 - org.liquibase:liquibase-core:3.8.2。 (不是专业版)
Liquibase 文档 (1 https://docs.liquibase.com/change-types/sql.html & 2 https://docs.liquibase.com/concepts/changelogs/sql-format.html)下面说的是splitStatements
(默认为 true)
设置为 false 时,不会在 ; 和 GO 上使用 Liquibase split 语句。
如果未设置则默认为 true
and
当设置为时,删除 ; 和 GO 上的 Liquibase split 语句
错误的。默认值为:true。
我发现的另一个有用的软文 -在 Liquibase 中, split 语句上可以有空行吗? https://stackoverflow.com/a/67230550/4820101
我理解 - 当 splitStatements 为 true 时,liquibase 会将语句拆分为;
and GO
- 目前还不完全清楚有什么好处
splitStatements
添加 - 即如果 SQL 语句被分割;
(结束分隔符)与否,会有什么区别 - 即如果语句在单个查询或多个查询中执行 - 数据库不会处理“;”无论如何基于的东西。这似乎是必须理解的。 ——有人可以举个例子吗?
- 我当前的项目有
splitStatements:false
。禁用 splitStatements 可以给我们带来什么好处。 -任何例子将不胜感激。
------------------------@user13579 回答后问题得到扩展
以下是 liquibase 变更日志文件的摘录。这就是我提出这个问题的原因。它有splitStatements:false
and a ;
s 在脚本中并且它有效。和splitStatements:false
我预计在这种情况下会出现错误,并且我想答案也表明在这种情况下会出现错误。下面是来自生产代码,所以我不确定它是如何工作的,并且后端是 POSTGRE。有人可以解释一下吗。
--liquibase formatted sql
--changeset adam:001-users-001 failOnError:true splitStatements:false logicalFilePath:001-users.sql
CREATE TABLE sys_users
(
user_id SERIAL,
first_name character varying(64) NOT NULL,
last_name character varying(64) NOT NULL,
email character varying(255) NOT NULL
)
WITH (
OIDS=FALSE
);
CREATE TABLE user_role
(
role_id SERIAL,
role_name character varying(255) NOT NULL,
description character varying(255) NOT NULL,
created_on timestamp(6) with time zone NOT NULL,
created_by character varying(64) NOT NULL,
)
WITH (
OIDS=FALSE
);