首先 - 我使用JPA ORM(EclipseLink),它不支持ILIKE
。所以我正在寻找具有不区分大小写搜索的解决方案。我做了以下事情:
CREATE TABLE IF NOT EXISTS users (
id SERIAL NOT NULL,
name VARCHAR(512) NOT NULL,
PRIMARY KEY (id));
CREATE INDEX users_name_idx ON users USING gin (LOWER(name) gin_trgm_ops);
INSERT INTO users (name) VALUES ('User Full Name');
但是,此查询返回用户:
SELECT * FROM users WHERE name ILIKE '%full%';
但是这个没有:
SELECT * FROM users WHERE name LIKE '%full%';
那么,如何在PostgreSQL中用LOWER创建GIN索引?
答案 0 :(得分:3)
我不确定我理解这个问题。因为你提到GIN并插入一行并期望它返回时不区分大小写的比较,但是一个疯狂的猜测 - 也许你正在寻找citext
?..
t=# create extension citext;
CREATE EXTENSION
t=# CREATE TABLE IF NOT EXISTS users (
id SERIAL NOT NULL,
name citext NOT NULL,
PRIMARY KEY (id));
CREATE TABLE
t=# INSERT INTO users (name) VALUES ('User Full Name');
INSERT 0 1
t=# SELECT * FROM users WHERE name LIKE '%full%';
id | name
----+----------------
1 | User Full Name
(1 row)
<强>更新强>