我试图向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上的注释.