我想创建一个包含操作的唯一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,所以我们有一个独特的条目。
答案 0 :(得分:0)
这将是一个半个项目。看起来没有一种非常简单的方法可以做到这一点,但是使用PostgreSQL一切皆有可能。我想你想要一个使用GIST的排除约束。不幸的是,排除约束并不容易,因为没有简单的类型支持这个。
我认为你的基本解决方案必须涉及:
转换为合适的数据类型(可能是位(n))
足够的运算符允许位(n)的GiST索引。这意味着你必须为所有GiST操作类构建函数和操作符,创建操作符族等。
使用您的操作创建排除约束。
这不容易,而且会很复杂,但有一些努力和奉献是可能的。我希望这样做会涉及一到两百行代码。您可能也想编写单元测试。