如何在 PostgreSQL hstore 中查询带通配符的值

2024-01-23

我正在尝试查询 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%'

or:

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

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


您可以通过键从hstore列与->操作员 http://www.postgresql.org/docs/9.2/static/hstore.html#HSTORE-OP-TABLE.

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柱子。请参阅注释指数类型 http://www.postgresql.org/docs/9.2/static/indexes-types.html关于 LIKE 的索引使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PostgreSQL hstore 中查询带通配符的值 的相关文章

随机推荐