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

时间:2013-04-22 21:41:11

标签: sql postgresql postgresql-9.1

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

CREATE UNIQUE INDEX ux_data ON table (name, color)

我想添加的操作是“num& new_num = 0”,其中num是现有列,new_num是要插入的值。

这可能吗?

更新:以下是有关我想要做的更详细的信息。

数据库:

name    color    num
one     red      5
two     green    5
one     red      8

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

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

我们有匹配的名称和颜色以及101&amp ;; 001 = 1,此新条目1不是唯一的,但如果数字已更改为2,则应拒绝该条目。

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

现在我们有匹配的名称和颜色。对于所有名称/颜色匹配的数字101& 010 = 0,1000& 0010 = 0,所以我们有一个独特的条目。

1 个答案:

答案 0 :(得分:0)

这将是一个半个项目。看起来没有一种非常简单的方法可以做到这一点,但是使用PostgreSQL一切皆有可能。我想你想要一个使用GIST的排除约束。不幸的是,排除约束并不容易,因为没有简单的类型支持这个。

我认为你的基本解决方案必须涉及:

  1. 转换为合适的数据类型(可能是位(n))

  2. 足够的运算符允许位(n)的GiST索引。这意味着你必须为所有GiST操作类构建函数和操作符,创建操作符族等。

  3. 使用您的操作创建排除约束。

  4. 这不容易,而且会很复杂,但有一些努力和奉献是可能的。我希望这样做会涉及一到两百行代码。您可能也想编写单元测试。