postgres中的自定义约束

时间:2016-08-08 19:02:09

标签: postgresql

我有下表

 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()

目前,我有votervotee的唯一约束,这意味着每位用户只有1票

我想强制执行允许每周使用timestamp列进行投票的条件。用户每周只能投票一次。

有没有办法可以为postgres添加自定义约束?它们和功能一样吗?

1 个答案:

答案 0 :(得分:0)

约束类似于PostgreSQL中的特殊触发器。

普通触发器不会执行,因为它们无法看到数据库的并发修改,因此两个并发事务都可以看到它们的条件已满足,但是在它们提交后,可能会违反该条件。

我建议的解决方案是在整个过程中使用SERIALIZABLE个事务(每个人,包括读者,必须使用它们才能工作)并在{{1}中验证您的情况触发器。
BEFORE将保证上述情况不会发生。