如何在 PostgreSQL 中使用 LOWER 创建 GIN 索引?

How to create GIN index with LOWER in PostgreSQL?

首先 - 我使用不支持 ILIKE 的 JPA ORM (EclipseLink)。所以我正在寻找不区分大小写搜索的解决方案。我做了以下事情:

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');

然而,这个查询returns用户:

SELECT * FROM users WHERE name ILIKE '%full%';

但是这个没有:

SELECT * FROM users WHERE name LIKE '%full%';

那么,如何在PostgreSQL中创建带有LOWER的GIN索引呢?

我不确定我是否理解问题。因为你提到 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)

更新

expression based index requires expression in query