PostgreSQL 基于范围数字字段的唯一索引
我有一个 scheduleitem
表,其中包含 room
、dayofweek
、starttime
和 endtime
列。我希望能够在 room
和 dayofweek
创建唯一索引,其中谓词(以某种方式)防止表包含重叠时间,即防止重叠潜在的新行 r2
和任何给定的现有行 r1
满足
r2.endtime > r1.starttime and r1.endtime > r2.starttime
到目前为止,我无法将子查询添加到部分索引谓词,以及我在唯一列的列表必须是不可变的(不能运行任何查询),所以我很困惑。
I have a scheduleitem
table with columns for room
, dayofweek
, starttime
and endtime
. I'd like to be able to create a unique index on room
and dayofweek
where the predicate (somehow) prevents the table from containing overlapping times, that is, prevent overlap where a potential new row r2
and any given existing row r1
satisfy
r2.endtime > r1.starttime and r1.endtime > r2.starttime
So far I can't add a subquery to the partial index predicate, and any stored procedure that I reference in the list of unique columns has to be immutable (can't run any queries), so I'm stumped.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您正在寻找功能排除约束 - 请参阅 http://www.postgresql .org/docs/9.0/static/sql-createtable.html 并查看有关 EXCLUDE 的部分。
You are looking for the feature EXCLUSION CONSTRAINTS - see http://www.postgresql.org/docs/9.0/static/sql-createtable.html and look at the part about EXCLUDE.
为什么不直接使用触发器呢?您可以在此处阅读有关它们的信息。
Why not just use a trigger? You can read about them here.