PostgreSQL使用两列重复项复制行

PostgreSQL使用两列重复项复制行,postgresql,postgresql-9.5,Postgresql,Postgresql 9.5,在PostgreSQL中,我正在寻找以下问题的答案。 有两列提供有关“开始”和“结束”的数据,以及一个“日期”列。当前,“日期”列只存在一次,其中“开始”和“结束”用可能性填充 我正在寻找创建一个具有唯一值但日期重复的“开始”和“结束”列的可能性 当前: id date start end 1 2017-03-13 a [null] 2 2017-03-14 [null] a 3 2017-03-14 b [

在PostgreSQL中,我正在寻找以下问题的答案。 有两列提供有关“开始”和“结束”的数据,以及一个“日期”列。当前,“日期”列只存在一次,其中“开始”和“结束”用可能性填充

我正在寻找创建一个具有唯一值但日期重复的“开始”和“结束”列的可能性

当前:

id  date          start    end
1   2017-03-13    a        [null]
2   2017-03-14    [null]   a
3   2017-03-14    b        [null]
4   2017-03-16    [null]   b
5   2017-03-16    c        c
希望:


有人有想法吗?

如果我正确理解了您的问题,并且您希望设置
开始
结束
中的一个,并且与
日期
的组合是唯一的,您可以这样做:

ALTER TABLE tab
   ADD CHECK(start IS NULL AND "end" IS NOT NULL
          OR start IS NOT NULL AND "end" IS NULL);

CREATE UNIQUE INDEX ON tab (date, COALESCE(start, "end"));

在开始和结束列上创建唯一索引。感谢您的反应。当我这样做时,我得到了错误`error:cannotcreateunique index“test_idx”DETAIL:Key(start,end)=(c,c)是重复的。'这是我所期望的,但不知道它如何解决我的问题。如下所示,end是一个关键字,需要双引号,最好使用不同的名称。
ALTER TABLE tab
   ADD CHECK(start IS NULL AND "end" IS NOT NULL
          OR start IS NOT NULL AND "end" IS NULL);

CREATE UNIQUE INDEX ON tab (date, COALESCE(start, "end"));