我正在使用Postgresql 9.4。我想使用唯一索引来强制执行约束。假设我有一个包含以下字段的表:
name varchar not null,
started_on tiemstamp not null,
ended_on timestamp
当ended_on
为空时,名称被视为有效。只要没有其他name
name
为空,或ended_on
和started_on
所限定的窗口没有ended_on
,就可以多次使用name
t与select * from table
的任何其他窗口重合。
如果我要name | started_on | ended_on
-----+------------+---------
asdf | 4 | 5
asdf | 7 | NULL
并获得这些结果(比如时间戳是纪元以来的秒数):
name | started_on | ended_on
-----+------------+---------
asdf | 4 | 5
asdf | 3 | NULL
这没关系
但这不行:
ended_on
让started_on/ended_on
为空的约束是唯一的是容易的部分。但我无法弄清楚如何让约束与个别new ObjectMapper().readValue(request.getInputStream(), UserDto.class);
次进行比较。