postgres(Rails)中的数组列的Uniq索引

我有一个数组列,它是rails中唯一验证的一部分。

所以有一列表a,b,c,d,e。

验证:validates_uniqueness_of:d,范围:[:a,:b]

现在,由于我有多个Rails服务器,有时在表中会有重复的行,因为没有数据库级别的限制。 更多关于它:http://robots.thoughtbot.com/the-perils-of-uniqueness-validations/

所以,我试图在表中添加一个唯一索引,如下所示:add_index:table,[“a”,“b”,“d”],unique:true,使用::gin

我正在使用杜松子酒。 见http://www.postgresql.org/docs/current/static/gin-intro.html可以PostgreSQL索引数组列吗?

然而,

似乎我仍然可以在执行db:migrate之后添加重复行。 我假设这是因为数组上的唯一索引不起作用。

任何指针?

谢谢!

  • 我正在使用Rails4
  • 规范化表格目前不是一种选择

  • 最好的我知道,Postgres将只使用btree索引强制执行一个唯一的约束。 所以,你的索引创建代码要么是默默地失败,要么是默默地忽略定义的独特部分。

    需要考虑的另一个考虑因素是array[1,2,3] <> array[3,2,1] ,就Postgres而言。 为了确保正确的唯一性验证,您可能还需要在数组上实施约束,以便拒绝未排序的值。

    (更好的是,你应该正确地规范你的数据,避免使用这样一个数组,但我离题了......这是另一个话题。)

    链接地址: http://www.djcxy.com/p/87223.html

    上一篇: Uniq index on array column in postgres (Rails)

    下一篇: Index a postgresql array column for greater than / less than comparisons?