如何根据字段值创建约束

时间:2017-05-25 15:30:52

标签: postgresql

我有一张关税表。

表有三列:id INT,接收INT,is_default INT(0/1);

我需要制定约束,这将限制为is_default = 1的同一接收创建新的资费。所以每次接收只能有一个默认资费。

由于

1 个答案:

答案 0 :(得分:1)

您需要unique partial index

CREATE UNIQUE INDEX uniq_tariff_reception_where_is_default
  ON tariff (reception)
  WHERE is_default = 1

UNIQUE索引的工作方式与UNIQUE约束完全相同(UNIQUE约束实际创建UNIQUE索引以实现唯一性“,但约束版本{{ 3}}:

  

添加唯一约束将自动在约束中列出的列或列组上创建唯一的B树索引。仅覆盖某些行的唯一性限制不能写为唯一约束,但可以通过创建唯一的部分索引来强制执行此类限制。

备注:请考虑使用BOOLEAN列的is_default类型。这样,您的索引可以是WHERE is_default = TRUE甚至是WHERE is_default