如何在HSQL中创建不区分大小写的索引或约束



如何在PostgreSQL(;sql.syntax_pgs=true)模式下运行的HSQL中创建不区分大小写的索引或约束?

在Postgres中,可以使用lower()或lcase():

CREATE UNIQUE INDEX lower_username_index ON enduser_table ((lcase(name)));

PostgreSQL也有CITEXT数据类型,但不幸的是,HSQL似乎不支持它。

我目前在读HSQL 2.2.8和PostgreSQL 9.0.5。或者,其他内存中数据库可能更适合测试PostgreSQL DDL和SQL?

提前感谢!

使用HSQLDB,最好定义UNIQUE约束,而不是唯一索引。

实现目标有两种方法:

  1. 将列的类型更改为VARCHAR_IGNORECASE,然后使用ALTER TABLE enduser_table ADD CONSTRAINT CONST_1 UNIQUE(name)

  2. 或者,创建一个生成的列,然后在此列上创建UNIQUE约束`ALTER TABLE enduser_TABLE ADD COLUMN lc_name VARCHAR(1000)GENERATED ALWAYS AS(LCASE(name))'

对于这两种方法,NAME列中的重复值都会被拒绝。对于第一种方法,索引用于在NAME列上进行搜索。对于第二种方法,索引用于lc_name列上的搜索。

(UPDATE)如果要使用PosgreSQL CITEXT类型,请在HSQLDB中定义该类型,然后使用第一个选项。

CREATE TYPE CITEXT AS VARCHAR_IGNORECASE(2000)
CREATE TABLE enduser_table (name CITEXT, ...
ALTER TABLE enduser_table ADD CONSTRAINT CONST_1 UNIQUE(name)

最新更新