【问题标题】:PostgreSQL jsonb testing using in-memory db使用内存数据库的 PostgreSQL jsonb 测试
【发布时间】:2018-12-13 21:46:30
【问题描述】:

我在生产中使用 postgres,并且有包含 jsonb 类型列的表。我正在尝试使用 junit 和内存中的嵌入式数据库来测试这些查询。

过去,我使用 H2 和 HSQL 来测试在 MySql 或 Sybase 上运行的查询。但是,我在将这些用于 postgres 时遇到了麻烦,因为 H2/HSQL 不支持 jsonb 类型。

Caused by: org.hsqldb.HsqlException: type not found or user lacks privilege: JSONB
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ParserDQL.readTypeDefinition(Unknown Source)
at org.hsqldb.ParserTable.readColumnDefinitionOrNull(Unknown Source)
at org.hsqldb.ParserTable.readTableContentsSource(Unknown Source)
at org.hsqldb.ParserTable.compileCreateTableBody(Unknown Source)
at org.hsqldb.ParserTable.compileCreateTable(Unknown Source)
at org.hsqldb.ParserDDL.compileCreate(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 18 more

是否有任何替代方法可用,或者是否有任何我遗漏的技巧可以使 jsonb 与 H2/HSQL 一起使用?

【问题讨论】:

  • 唯一实现 JSONB 和使用它的函数的数据库是 Postgres。用不同的数据库系统测试是没有意义的
  • 我当然可以使用 postgres 本身。但是,我没有看到可以嵌入到我的 junit 中的 postgres 的内存版本。我想避免依赖远程服务器,这会在多个测试运行之间产生争用。
  • 除了专用数据库服务器之外别无选择。

标签: postgresql testing junit h2 hsqldb


【解决方案1】:

H2 不支持 JSONB 列类型,找到这个解决方法, 在 postgres 中创建测试数据库,并在您的集成测试中使用它

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles({"test"})

在 application-test.yml 中定义 db 属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 2011-02-12
    • 2019-10-28
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多