如果该密钥存在,我想在hstore列中的特定键上创建唯一索引或约束。我希望在另一个问题中可以找到答案:
Practical limitations of expression indexes in PostgreSQL
但我尝试了我能提出的每个版本的语法,但没有任何方法可行。
目前,我的桌子是
hstore_table
hstore字段是hstore_value
他们想要强制独特的钥匙是&f; foo'和' bar'当它们存在时。
我的PostgreSQL版本是8.4.13
答案 0 :(得分:15)
如果我已经理解了你正确要求的东西,你需要一个部分独特的功能索引:
CREATE TABLE hstest ( x hstore not null );
CREATE UNIQUE INDEX hstest_key_k1_values_unique
ON hstest((x -> 'k1'))
WHERE ( x ? 'k1' );
WHERE
子句不是严格要求的,因为如果找不到,则键查找将为null。它是否合适取决于您的疑问。
如果你想要多个键,如果你想要两个键是独立的,可以使用两个索引;如果要链接它们,请使用索引两个表达式,这样唯一约束允许(1,2)和(1,3)或(2) ,2)但不是另一个(1,2),像这样:
CREATE UNIQUE INDEX hstest_key_k1k2_values_unique
ON hstest ((x -> 'k1'), (x -> 'k2'));