【问题标题】:How to create a case insensitive index or constraint in HSQL如何在 HSQL 中创建不区分大小写的索引或约束
【发布时间】:2012-07-19 19:23:24
【问题描述】:

如何在 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 的内存数据库?

提前致谢!

【问题讨论】:

    标签: postgresql hsqldb in-memory-database


    【解决方案1】:

    使用 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 列。

    (更新)如果要使用 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)
    

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2019-07-14
      • 2016-12-24
      • 2014-03-18
      • 2017-12-01
      • 2011-04-26
      相关资源
      最近更新 更多