我有下表
Column | Type | Modifiers
-----------+--------------------------+---------------------------------------------------------
id | integer | not null default nextval('votes_vote_id_seq'::regclass)
voter | character varying |
votee | character varying |
timestamp | timestamp with time zone | default now()
目前,我有voter
和votee
的唯一约束,这意味着每位用户只有1票
我想强制执行允许每周使用timestamp列进行投票的条件。用户每周只能投票一次。
有没有办法可以为postgres添加自定义约束?它们和功能一样吗?
答案 0 :(得分:0)
约束类似于PostgreSQL中的特殊触发器。
普通触发器不会执行,因为它们无法看到数据库的并发修改,因此两个并发事务都可以看到它们的条件已满足,但是在它们提交后,可能会违反该条件。
我建议的解决方案是在整个过程中使用SERIALIZABLE
个事务(每个人,包括读者,必须使用它们才能工作)并在{{1}中验证您的情况触发器。
BEFORE
将保证上述情况不会发生。