我需要使用psql
citext
对JUnit
hsqldb
进行测试
使用liquibase
设置psql
- 方言为hsqldb
<changeSet id="5" author="ustimenko" context="QA">
<comment>Modify test database to be case insensitive</comment>
<sql>
SET DATABASE SQL SYNTAX PGS TRUE;
SET DATABASE COLLATION SQL_TEXT_UCC;
</sql>
</changeSet>
通过JPA更改列定义
@Column(columnDefinition = "citext")
private String email;
Caused by: java.sql.SQLSyntaxErrorException: type not found or user lacks privilege: CITEXT
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeUpdate(Unknown Source)
at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56)
... 79 common frames omitted
Caused by: org.hsqldb.HsqlException: type not found or user lacks privilege: CITEXT
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)
... 82 common frames omitted
我尝试应用了一些解决方案
jdbc:hsqldb:mem:test;sql.live_object=true
作为数据库的网址
得到相同的结果
SET DATABASE LIVE OBJECT
是liquibase
变更集的一部分
在LIVE
关键字处出现语法错误。我通过inmemory hsqldb控制台确定了它。但是,当citext
字段类型的alter table更改为VARCHAR(3***)
尝试为我的生产数据源添加jdbc:postgresql://localhost/test?stringtype=unspecified
,但结果相同
使用ddl-auto
进行游戏,但不需要任何结果。
请你解释一下我应该怎么做?我不想使用单独的psql数据库进行测试。是否有任何解决方案可以在内存中使用来解决我的问题?
答案 0 :(得分:0)
您希望使用CITEX数据类型(不区分大小写的字符串类型)使用PostgreSQL区分大小写的比较。 HSQLDB使用排序规则,可以应用于整个数据库或特定的用户定义类型。按如下所示定义CITEX类型,使用此类型选择列的最大字符大小。
CREATE TYPE CITEX AS VARCHAR(200) COLLATE SQL_TEXT_UCC