liquibase“splitStatements”有什么好处?

sam*_*ers 5 liquibase liquibase-sql

正在使用的 liquibase 版本 - org.liquibase:liquibase-core:3.8.2。(不是专业版)

Liquibase 文档(12)如下所述splitStatements(默认为 true)

设置为 false 时,不会在 ; 和 GO 上使用 Liquibase split 语句。如果未设置则默认为 true

当设置为 false 时,删除 ; 和 GO 上的 Liquibase split 语句。默认值为:true。

我发现的另一个有用的软件帖子 - In Liquibase is it OK to have an empty line on splitstatements?

;我理解 - 当 splitStatements 为 true 时,liquibase 会拆分和上的语句GO

  1. 目前尚不完全清楚splitStatements增加了什么好处 - 即,如果 SQL 语句是否在(结束分隔符)上分割;,会有什么区别 - 即,如果语句在单个查询或多个查询中执行 - 数据库不会处理“ ;” 无论如何基于的东西。这似乎是必须理解的。——有人可以举个例子吗?
  2. 我当前的项目有splitStatements:false. 禁用 splitStatements 可以给我们带来什么好处。-任何例子将不胜感激。

------------------------ 下面@user13579 的回答后扩展的问题
是 liquibase 变更日志文件的摘录。这就是我提出这个问题的原因。它在脚本中有splitStatements:false一个;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
);
Run Code Online (Sandbox Code Playgroud)