如何使用PostgreSQL hstore中的通配符查询值

前端之家收集整理的这篇文章主要介绍了如何使用PostgreSQL hstore中的通配符查询值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图向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%'

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

您可以使用 -> operator从hstore列中的键提取值.
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列.有关LIKE的索引使用情况,请参阅Index Types上的注释.

猜你在找的Postgre SQL相关文章