Postgres:具有值的复合唯一索引

时间:2014-02-21 21:46:44

标签: postgresql indexing

CREATE TABLE article (
   day integer,
   is_chosen boolean
)
CREATE UNIQUE INDEX day_is_chosen_unique_index ON article (day, is_chosen);

上面将给出一个关于两列的唯一索引,这意味着在给定的一天我们可以选择一篇文章和一篇未选择的文章。

我只需要is_chosen字段的唯一索引。换句话说,在任何一天,我们只能选择一篇文章和多篇未选择的文章

也许是这样的:

CREATE UNIQUE INDEX day_is_chosen_unique_index ON article (day, is_chosen true);

我将如何创建此复合索引?

1 个答案:

答案 0 :(得分:1)

这个部分索引就足够了:

CREATE TABLE article (
    id          INT
,   when_day    INT
,   is_chosen   BOOLEAN DEFAULT FALSE
);

CREATE UNIQUE INDEX day_is_chosen_unique_index
    ON article ( when_day )
    WHERE is_chosen; 

注意:“DAY”是SQL中的保留关键字,因此最好不要将其用作列名。