【问题标题】:Uniq index on array column in postgres (Rails)postgres(Rails)中数组列的唯一索引
【发布时间】:2013-12-27 07:45:29
【问题描述】:

我有一个数组列,它是 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 , using: :gin

我正在使用杜松子酒。看 http://www.postgresql.org/docs/current/static/gin-intro.html Can PostgreSQL index array columns?

然而,

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

任何指针?

谢谢!

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

【问题讨论】:

    标签: postgresql validation activerecord ruby-on-rails-4 indexing


    【解决方案1】:

    据我所知,Postgres 只会使用 btree 索引强制执行唯一约束。因此,您的索引创建代码要么默默地失败,要么默默地忽略其定义的独特部分。

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

    (更好的是,您可能应该适当地规范化您的数据,以避免一开始就使用这样的数组,但我离题了......这完全是另一个话题。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2013-09-13
      • 2014-04-26
      • 2014-06-25
      相关资源
      最近更新 更多