我正在try 查询hstore,查找与搜索条件匹配的某个键的所有值.

我可以得到某个键的所有值,如下所示:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier']))
FROM "products"

我还可以得到一个特定的值:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => Toshiba'

我真正想要的是(这不起作用):

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => %tosh%'

或者:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE lower(sup)
LIKE '%tosh%'

用于不区分大小写的搜索.这是怎么做到的?

推荐答案

您可以使用-> operatorhstore列中按键提取值.

SELECT data->'Supplier' AS sup
FROM products
WHERE lower(data->'Supplier') LIKE '%tosh%';

此外,与PostgreSQL中的大多数表达式一样(random()等表达式除外),您可以为该值编制索引:

CREATE INDEX products_supplier_key ON products ((data->'Supplier'));
CREATE INDEX products_supplier_lowercase_key ON products ((lower(data->'Supplier')));

这将允许PostgreSQL使用索引回答许多此类查询,而不是获取每一行并扫描hstore列.请参阅Index Types页上关于LIKE索引用法的注释.

Postgresql相关问答推荐

列索引8上的扫描错误,名称已复制:不支持扫描,正在存储驱动程序.值类型[]uint8到类型*[]*bool

Jsonb[]字段中的PostgreSQL否定&q;-0.0

从数据集中提取彼此喜欢的用户(&Q;)

将整数(以毫秒为单位的epoch时间)转换为PrimitiveDateTime

错误:用户需要系统密码:postgres

合并两个字典并创建一个包含更新凭据的字典列表

PostgreSQL 中的复制槽是否会阻止删除 WALL,即使它们来自另一个数据库?

是否可以在 postgresql 中添加表元数据?

如何防止 PDO 将问号解释为占位符?

在 PostgreSQL 中表示Sparse稀疏数据

sql语句错误:column .. does not exist

使用 pg-promise 插入多条记录

在 postgresql 中,如何在 jsonb 键上返回布尔值而不是字符串?

由于外键约束无法删除对象

如何使用 Django Migrations 重新创建已删除的表?

将数据推送到 Heroku 时出错:time zone displacement out of range

如何将 PostgreSQL 查询输出导出到 csv 文件

PostgreSQL 中是否有类似 zip() 函数的东西,它结合了两个数组?

用于将布尔列排序为 true、null、false 的 SQL

Postgresql 用随机值更新每一行