PostgreSQL使用两列重复项复制行
在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 [
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"));