如何在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约束,而不是唯一索引。

有两种方法可以实现你的目标:

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

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

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

    (更新)如果您想使用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)
    
    链接地址: http://www.djcxy.com/p/88627.html

    上一篇: How to create a case insensitive index or constraint in HSQL

    下一篇: HQSLDB