CREATE TABLE foo ( dt AS DATE NOT NULL,type AS TEXT NOT NULL,CONSTRAINT unique_dt_type UNIQUE(dt,type) -- check constraint(?) )
当只有一个特定的条件存在时,尝试思考正确的语法来创建一个唯一的约束时,有一个脑袋.
给定,类型可以具有值A-F,每个日期只能有一个A,但可以有多个B-F.好表示例:
2010-01-02 | 'A' -- only one 2010-01-02 | 'B' -- can have multiple 2010-01-02 | 'B' 2010-01-02 | 'B' 2010-01-02 | 'C' -- can have multiple 2013-01-02 | 'A' -- only one 2010-01-02 | 'B' -- can have multiple 2010-01-02 | 'B' 2013-01-02 | 'F' -- can have multiple 2013-01-02 | 'F'
尝试阅读检查/唯一的语法,但没有任何例子. CHECK接近,但仅限于一个范围,并未与UNIQUE情景一起使用.也尝试搜索,但是我的搜索技能要么不符合标准,要么没有任何类似的问题.
解决方法
Postgresql可以通过它的“部分索引”功能来满足您的需求.实际上,这是通过在创建索引语句中添加一个where子句来实现的.
样品:
CREATE INDEX my_partial_ix ON my_sample_table (my_sample_field) WHERE NOT (my_sample_field = 'duplicates ok');
看看这里:
http://www.postgresql.org/docs/current/interactive/indexes-partial.html
请特别注意示例11-3.建立部分独特指数.它给出了一个与您明确目标一致的例子.