web-dev-qa-db-ja.com

PostgreSQLで小文字のみに基づいてインデックスを作成するにはどうすればよいですか?

小文字のみに基づいてインデックスを設定するにはどうすればよいですか?

実際のフィールドには大文字と小文字の両方が含まれていますが。

また、クエリを実行して小文字のインデックス値のみを返すことはできますか?

42
Paul Townsend

インデックスを作成し、フィールドを大文字または小文字に変換できます。その後、クエリを実行すると、同じ変換を行うことができ、それは正しいことを行います。

そう:

CREATE UNIQUE INDEX lower_case_username ON users ((lower(username)));

次に、同じことをクエリします。

SELECT username FROM users WHERE lower(username) = 'bob';
63
Pointy

the docs によると、これを行うことができます:

CREATE UNIQUE INDEX lower_title_idx ON films ((lower(title)));
9
mezzie
CREATE UNIQUE INDEX my_index_name ON my_table (LOWER(my_field));
3
Adrian Smith

これをワイルドカード検索にも使用できます。

CREATE INDEX IF NOT EXISTS foo_table_bar_field ON foo_table(lower(username))

そのようなクエリ:

SELECT * FROM foo_table WHERE lower(username) like 'bob%'
0
Chris