如何在 Spring Boot 服务中的 SQLite 中创建模式?
我们已经有一个支持 Oracle 和 PostgreSQL 持久性的服务,并且我们使用 flyway 进行模式迁移。对于新的用例,我们还应该支持 Sqlite。
我现在遇到的问题是 Oracle 和 PostgreSQL 都使用一个模式,并且所有用于 DDL 和插入测试数据的 SQL 语句也都包含此模式。我知道想在 Springboot 中配置 Sqlite,以便在那里也可以使用相同的模式。
到目前为止,我发现这可能适用于 ATTACH 命令,但我不知道如何将其与数据源配置一起使用,以及如何与 flyway 一起使用。
任何意见表示赞赏。
编辑
我想在 Sqlite 中创建一个这样的表
CREATE TABLE my_schema.ta_user (
id varchar(36) NOT NULL,
name varchar(50) NOT NULL,
description varchar(512) NOT NULL,
valid_from timestamp,
created timestamp NOT NULL,
modified timestamp NOT NULL,
ip varchar(64) ,
username varchar(255) ,
PRIMARY KEY (id)
) ;
但我收到
[SQLITE_ERROR] SQL 错误或缺少数据库(未知数据库 my_schema)
我需要在那里有模式的原因是我有很多 IT 测试,我使用 @SQL 注释使用测试数据设置数据库,并且我不想提供特定于 DB 的测试数据(因为相同的脚本现在已经适用于 oracle 和 postgresql)
您只需用特定的 sqlite 语法重写您的迁移并将它们放在自己的文件夹中(就像您希望已经对 oracle / postgres 所做的那样)只需配置您的应用程序(application.yaml / application.properties)以使用来自该特定 sqlite 文件夹的脚本。
由于我们没有找到更好的解决方案,我们最终为带有和不带有架构信息的 DDL 和测试数据创建了单独的集合。在我们的用例中,SQLite 始终用于 greenfield 设置,这意味着不会发生迁移,如果架构发生变化,我们会直接在基本 SQL 文件中执行此操作(而不是创建新文件)。尽管如此,对于所有选项,flyway 都用于创建数据库。根据使用的配置文件,我们决定需要为 IT 测试导入哪组测试数据,然后使用 ScriptUtils.executeSqlScript 完成