【发布时间】:2020-06-08 17:40:47
【问题描述】:
我有一个 spring-boot 应用程序和 sqlite db。 如果我在一个文件中编写两个脚本,则只有第一个脚本对 db.xml 进行更改。该表创建但没有数据插入,但在日志中我看到两个脚本都已执行。 如果我将每个脚本写入单独的文件,那么就可以了,表创建和数据插入。 如何让它在一个文件中执行多个脚本?
CREATE TABLE IF NOT EXISTS acl_class
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
class character varying UNIQUE NOT NULL
);
INSERT INTO acl_class
(class)
VALUES
('models.User');
mysql db 也有同样的问题,但在这里我的应用程序出现运行时错误“Caused by: liquibase.exception.DatabaseException: You have an error in your SQL syntax;”但是语法没问题,并且单独创建表没有任何问题:
CREATE TABLE IF NOT EXISTS acl_class
(
id INT AUTO_INCREMENT PRIMARY KEY,
class VARCHAR(255) UNIQUE NOT NULL
);
CREATE TABLE IF NOT EXISTS acl_sid
(
id INT AUTO_INCREMENT PRIMARY KEY,
principal boolean NOT NULL,
sid VARCHAR(255) UNIQUE NOT NULL
);
【问题讨论】:
-
您的主变更日志是什么样的?可能的问题是您没有指定 Liquibase 应该拆分语句以及拆分字符应该是什么。最近有一篇博客文章涵盖了这个主题 - liquibase.org/2020/01/plain-SQL.html
-
非常感谢!我刚刚在文件的开头添加了两行乘法脚本:--liquibase formatted sql --changeset myname:create-multiple-tables splitStatements:true endDelimiter:;而且它奏效了!附言值得注意的是,我曾经在一个文件之前使用过使用 PostgreSql 的几个脚本,并且没有必要使用这个注解。因此,我不明白为什么它现在不起作用
标签: mysql sqlite spring-boot liquibase