【问题标题】:Postgresql Create Unique Index [duplicate]Postgresql创建唯一索引[重复]
【发布时间】:2013-11-20 07:39:10
【问题描述】:

我想在 mobile_number_1 和 mobile_number_2 列上创建唯一索引。

mobile_number_1 的值不会在 mobile_number_1 和 mobile_number_2 中重复

并且 mobile_number_2 不会在 mobile_number_1 和 mobile_number_2 中重复

我的表结构:

id | mobile_number_1 | mobile_number_2 | city

【问题讨论】:

  • 为什么不用手机号码创建子表?这是更多的关系方法

标签: postgresql


【解决方案1】:

我认为应该这样做(虽然还没有彻底测试过)

create unique index idx_unique_mobile_number1
 on person (least(mobile_number_1, mobile_number_2));

create unique index idx_unique_mobile_number2
 on person (greatest(mobile_number_1, mobile_number_2));

【讨论】:

  • 如果存在所需的运算符类,另一种可能是alter table person add phone_excl exclude using gist ((array[phone1, phone2]) with &&);
  • @Denis:好主意。我总是忘记排除约束。您应该将其添加为答案
  • 不,我更喜欢你的。 exclude 需要另外为 varchar 数组创建一个运算符类。 :-P
【解决方案2】:

这实际上是不可能的,您必须在代码中添加触发器或规则。 索引仅针对一列或多列。

【讨论】:

  • 这是不正确的:它实际上可能的。它可能也应该是一个评论,或者扩展,所以它有点冗长。
  • 是的,我想,谢谢,上面的回答让我学到了一些新东西
猜你喜欢
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2019-04-11
  • 2014-12-29
  • 2018-06-19
  • 1970-01-01
相关资源
最近更新 更多