如果存在特定键,我希望在hstore列上创建唯一索引或约束。我希望能够在以下问题中找到答案:Practical limitations of expression indexes in PostgreSQL,但是我尝试了各种语法的版本,但都没有起作用。我的表是"hstore_table",hstore字段是"hstore_value",当存在"foo"和"bar"时,我想强制它们成为唯一的键。我的PostgreSQL版本是8.4.13。
CREATE TABLE hstest ( x hstore not null );
CREATE UNIQUE INDEX hstest_key_k1_values_unique
ON hstest((x -> 'k1'))
WHERE ( x ? 'k1' );
CREATE UNIQUE INDEX hstest_key_k1k2_values_unique
ON hstest ((x -> 'k1'), (x -> 'k2'));
A.h{k=1}
,则不允许插入行B.h{k=1}
,但允许插入B.h{k=2}
或者B.h{x=1}
。类似于唯一约束条件,但是应用于 hstore 键的值,而不是整个列。 - Craig Ringer=
运算符,你可能可以使用hstore子集运算符hstore -> text []
来完成它,但前提是你只对固定的键列表感兴趣,并且对于空值处理语义没有问题。由于MVCC可见性规则,插入之前的触发器将无法工作;你不能使用触发器正确实现unique
约束。 - Craig Ringer