PostgreSQL-对HSTORE数值的GIN索引进行查询[英] PostgreSQL - query against GIN index of HSTORE value

本文是小编为大家收集整理的关于PostgreSQL-对HSTORE数值的GIN索引进行查询的处理方法,想解了PostgreSQL-对HSTORE数值的GIN索引进行查询的问题怎么解决?PostgreSQL-对HSTORE数值的GIN索引进行查询问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有以下构造函数(作为测试):

CREATE TABLE product (id BIGSERIAL PRIMARY KEY, ext hstore);
CREATE INDEX ix_product_ext ON product USING GIN(ext);

INSERT
INTO    product (id, ext)
SELECT  id, ('size=>' || CEILING(10 + RANDOM() * 90) || ',mass=>' || CEILING(10 + RANDOM() * 90))::hstore
FROM    generate_series(1, 100000) id;

我有以下查询,可以正常工作:

SELECT  COUNT(id)
FROM    (
    SELECT  id
    FROM    product
    WHERE  (ext->'size')::INT >= 41
    AND    (ext->'mass')::INT <= 20
) T

但我相信正确的方法是使用 @> 运算符.我有以下内容,但它给出了语法错误:

SELECT  COUNT(id)
FROM    (
    SELECT  id
    FROM    product
    WHERE  ext @> 'size>=41,mass<=20'
) T

我该怎么写?

推荐答案

阅读hstore 记录您的(最后一个查询)size>=41 并不意味着"当大小大于或等于 41 时":

text => text    make single-pair hstore

下面不能写mass<=20,因为没有这样的操作.使用 @> 运算符:

hstore @> hstore    does left operand contain right?

你可以写:

SELECT count(id)
FROM product
WHERE ext @> 'size=>41,mass=>20';

但是,它只需要尺寸等于 41 且质量等于 20 的这些产品.

本文地址:https://www.itbaoku.cn/post/1764039.html