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

标签 sql postgresql jpa eclipselink

首先 - 我使用不支持 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');

但是,此查询返回用户:

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

关于sql - 如何在 PostgreSQL 中使用 LOWER 创建 GIN 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49941067/

相关文章:

mysql - 如何在 SQL 中找到两列之间所有相反的组合

mysql MAX 查询不返回连接上的最新记录

sql - 在查询中查找 SQL 表

SQL:获取其他行未使用的数字列表

java - JPA 2.0 和 MySQL 不区分大小写的表名

java - Servlet、JSP、JPA - 未找到属性异常

sql - Scala Spark Cassandra 在主键匹配上更新或插入行

sql - 更新 SQL MS Access 2010

sql - Postgresql:仅当表不存在时如何创建表?

java - spring 3 启动的奇怪信息