【问题标题】:Embedded database and multiple catalogs嵌入式数据库和多个目录
【发布时间】:2017-09-08 01:23:18
【问题描述】:

我想为我的存储库创建集成测试。生产数据库是 Sybase,它由多个目录组成,其中有多个模式。

在我的代码中,我使用多个查询,我在不同的目录中选择数据:例如:

select * 
from catalog_a.schema_a.table_1 aa1, catalog_b.schema_a.table_2 ba2
where aa1.c1 = ba2.c2

所以对于测试,我想创建嵌入式数据库,如 H2、HSQLDB 或其他不同的东西。我试图找到可以让我用多个目录模拟 prod db 的东西,但我无法让它工作。请提出建议并提出解决方案。

我正在用 java/spring 编写应用程序。这里的另一个技巧是我的应用只为数据库创建了一个 DataSource。

【问题讨论】:

    标签: java database h2 hsqldb


    【解决方案1】:

    HSQLDB 仅支持单个目录,并且在查询中指定目录时会检查名称。您可以将目录名称从默认的 PUBLIC 更改为其他名称。例如:

    ALTER CATALOG public RENAME TO to catalog_a
    

    但不支持使用两个不同的目录名称。

    如果您在两个目录中的模式或表名不同,您可以修改 HSQLDB 的源代码,并在方法org.hsqldb.ParserDQL.checkValidCatalogName(String name) 中为您的测试禁用目录名称检查

    【讨论】:

    • 有趣...我可以试试。除了 H2,您是否知道类似的事情?
    【解决方案2】:

    我设法通过IGNORE_CATALOGS 属性和版本 1.4.200 在 H2 中实现了这一点。

    但是,他们文档中的 url 示例似乎对我不起作用,因此我在 schema.xml 中添加了一条语句:

    SET IGNORE_CATALOGS = true;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多