如果该键存在,我想在 hstore 列中的特定键上创建唯一索引或约束。我希望答案能在另一个问题的某个地方找到:
但是我尝试了我能想到的每个版本的语法,但没有任何效果。
目前,我的桌子是
hstore_table
hstore 字段是 hstore_value
当它们存在时,我想强制它们唯一的键是“foo”和“bar”。
我的 PostgreSQL 版本是 8.4.13
如果该键存在,我想在 hstore 列中的特定键上创建唯一索引或约束。我希望答案能在另一个问题的某个地方找到:
但是我尝试了我能想到的每个版本的语法,但没有任何效果。
目前,我的桌子是
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' );
该WHERE
子句不是严格要求的,因为如果找不到,则键查找将为空。是否合适将取决于您的查询。
如果您想要多个键,如果您希望两个索引是独立的,则使用两个索引,或者如果您想链接两个表达式,则使用两个索引,以便唯一约束允许 (1,2) 和 (1,3) 或 (2,2)但不是另一个(1,2),像这样:
CREATE UNIQUE INDEX hstest_key_k1k2_values_unique
ON hstest ((x -> 'k1'), (x -> 'k2'));