0

;sql.syntax_pgs=truePostgreSQL ( ) モードで実行されている 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 のテストに適した他のインメモリ データベースはありますか?

前もって感謝します!

4

1 に答える 1

1

HSQLDB では、一意のインデックスではなく、UNIQUE 制約を定義する方が適切です。

目的を達成するには、次の 2 つの方法があります。

  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 列の検索に使用されます。2 番目の方法では、インデックスは 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)
于 2012-07-20T16:32:11.797 に答える