【问题标题】:Custom constraints in postgrespostgres 中的自定义约束
【发布时间】:2016-08-08 19:02:09
【问题描述】:

我有下表

 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 有一个独特的约束,这意味着每个用户只有一票

我想强制执行一个条件,允许使用时间戳列每周进行一次投票。用户每周只能为被投票者投票一次。

有没有办法可以向 postgres 添加自定义约束?它们和函数是一样的吗?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

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

    普通触发器不会这样做,因为它们看不到数据库的并发修改,所以两个并发事务都可以看到它们的条件满足,但是在它们提交之后,可能会违反条件。

    我推荐的解决方案是在整个过程中使用 SERIALIZABLE 事务(每个人,包括读者,都必须使用它们才能工作)并在 BEFORE 触发器中验证您的条件。
    SERIALIZABLE会保证以上情况不会发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2016-12-05
      • 2016-11-23
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多