微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL hstore数组列的索引

我知道你可以在hstore列的字段上创建索引.
我知道你也可以在数组列上创建一个GIN索引.

但是在hstore数组上创建索引的语法是什么?

例如

CREATE TABLE customer (
    pk serial PRIMARY KEY,customer hstore,customer_purchases hstore[]
);

假设客户购买hstore可能是哈希

productId -> 1
price -> 9.99

我在customer_purchases hstore []中有一组数组

我想在customer.customer_purchases [] – >上创建一个索引.的productId

这可能吗?我尝试过不同的CREATE INDEX语法组合,但它们似乎都不支持hstore数组中的索引字段.

我觉得你误解了Postgresql Arrays. Array实际上只是一个字符串.您不能将数组中的对象(在本例中为HSTOREs)编入索引,因为它不是TABLE.

相反,创建一个额外的表:

CREATE TABLE customer (
    pk bigserial PRIMARY KEY,customer hstore
);

CREATE TABLE purchases (
    pk bigserial PRIMARY KEY,customer_pk bigint not null,purchase hstore not null,constraint "must be a valid customer!" 
        foreign key (customer_pk) references customer(pk)
);

另外,你为什么在这里使用HSTORE?

如果您必须在此处根据“购买”HSTORE创建INDEX,请执行以下操作:

CREATE OR REPLACE FUNCTION purchase_amount(purchase hstore) returns float as $$
    select ($1 -> 'price')::float;
$$language 'sql' IMMUTABLE;

CREATE INDEX "purchases by price" ON purchases (purchase_amount(purchase));

这只是一个理解HSTORE类型的练习吗?或者你是否有一些真正的用例会使你对真实数据的所有混淆都值得?

原文地址:https://www.jb51.cc/postgresql/192832.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐