我知道您可以在 hstore 列中的字段上创建索引。
我知道您还可以在数组列上创建 GIN 索引。
但是在 hstore 数组上创建索引的语法是什么?
e.g.
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 数组中的索引字段。
我认为你误解了 PostgreSQLArray
s. An Array
实际上只是一个字符串。您无法为对象建立索引(在本例中HSTORE
s) 在数组中,只是因为它不是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
s here?
If you must创建一个INDEX
基于"purchase"
HSTORE
在这里,做这样的事情:
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
类型?或者您是否有一些真实的用例可以使您的真实数据的所有这些混淆变得值得?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)