如何在 spring 引导服务中使用 sqlite 创建模式?

How to create a schema in sqlite in a spring boot service?

我们有一项服务支持 Oracle 和 PostgreSQL 的持久性,我们使用 flyway 进行模式迁移。对于新用例,我们还应该支持 Sqlite。

我现在遇到的问题是 Oracle 和 PostgreSQL 都使用一个模式,所有用于 DDL 和插入测试数据的 SQL 语句也包括这个模式。我知道我想在 Springboot 中配置 Sqlite,这样我也可以在那里使用相同的模式。

到目前为止,我发现这可能适用于 ATTACH 命令,但我不知道如何将其与数据源配置一起使用以及如何与 flyway 一起使用。

感谢任何意见。

编辑

我想在 Sqlite

中创建一个 table
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 注释设置了带有测试数据的数据库,但我不想提供数据库特定测试数据(因为相同的脚本现在已经适用于 oracle 和 postgresql)

您只需使用特定的 sqlite 语法重写您的迁移并将它们放在它们自己的文件夹中(就像您希望对 oracle / postgres 所做的那样)只需配置您的应用程序 (application.yaml / application.properties)使用特定 sqlite 文件夹中的脚本。

由于我们没有找到更好的解决方案,因此我们最终为 DDL 和测试数据分别创建了包含和不包含架构信息的集合。在我们的用例中,SQLite 始终用于新建设置,这意味着不会发生迁移,如果模式发生变化,我们直接在基本 SQL 文件中进行(不创建新文件) .尽管如此,对于所有选项,flyway 都用于创建数据库。根据使用的配置文件,我们决定需要为 IT 测试导入哪组测试数据,然后使用 ScriptUtils.executeSqlScript

完成