首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建包含操作的唯一PostgreSQL索引

创建包含操作的唯一PostgreSQL索引
EN

Stack Overflow用户
提问于 2013-04-22 21:41:10
回答 1查看 100关注 0票数 0

我想创建一个包含操作的唯一PostgreSQL索引。有人知道这是否可能吗?

代码语言:javascript
复制
CREATE UNIQUE INDEX ux_data ON table (name, color)

我要添加的操作是"num & new_num = 0",其中num是一个现有列,new_num是要插入的值。

这个是可能的吗?

更新:这里有关于我想要做的事情的更多细节。

数据库:

代码语言:javascript
复制
name    color    num
one     red      5
two     green    5
one     red      8

我要做的是防止条目不唯一的情况,例如:

新条目1: name = one,color = red,num = 1。

我们有匹配的名称和颜色,以及101 & 001 = 1中的第一个数字检查结果,这个新条目1并不是唯一的,但是如果数字被更改为2,则应该被拒绝。

新条目2: name = one,color = red,num =2

现在我们有了匹配的名字和颜色。对于所有名称/颜色中的num,都匹配101 & 010 =0和1000 & 0010 = 0,因此我们有一个唯一的条目。

EN

回答 1

Stack Overflow用户

发布于 2013-04-25 15:35:11

这将是一个一个半项目。似乎没有一种非常简单的方法可以做到这一点,但是有了PostgreSQL,任何事情都是可能的。我认为您需要使用GIST的排除约束。不幸的是,这种排除约束并不容易完成,因为没有支持这种约束的简单类型。

我认为您的基本解决方案必须包括:

  1. 转换为适当的数据类型(想必是位(N))
  2. 足够的运算符允许位(N)的GiST索引。这意味着您必须为所有GiST操作类构建函数和操作符,创建操作符系列等等。
  3. 使用您的操作创建一个排除约束。

这将不是一件容易的事,也会很复杂,但只要付出一些努力和奉献,这是可能的。我希望在此过程中将涉及到一到两百行代码。您可能也想编写单元测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16157227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档