【发布时间】: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