0

我有一個數組列,它是rails中唯一驗證的一部分。Postgres中的數組列上的Uniq索引(Rails)

所以一個列a,b,c,d,e。

驗證: validates_uniqueness_of:d,範圍:[:一,:B]

現在,因爲我有多個電源軌的服務器,有時會在表中重複的行,因爲沒有數據庫級別的約束。更多關於它:http://robots.thoughtbot.com/the-perils-of-uniqueness-validations/

所以, 我想在桌子上像這樣添加一個唯一索引: add_index:表,[ 「A」, 「B」, 「d」],獨特:true,則使用::杜松子酒

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

然而,

好像我仍然可以做DB之後添加重複行:遷移。我假設這是因爲數組上的唯一索引不起作用。

任何指針?

謝謝!

  • 我使用Rails4
  • 正火的表是不是一種選擇,目前

回答

1

最好的我知道,Postgres只是強制使用B樹索引的唯一約束。所以,你的索引創建代碼要麼是默默地失敗,要麼是默默地忽略定義的獨特部分。

需要考慮的另一個考慮因素是array[1,2,3] <> array[3,2,1]就Postgres而言。爲了確保正確的唯一性驗證,您可能還需要在數組上實施約束,以便拒絕未排序的值。

(更好的是,你應該正確地規範你的數據,以避免使用這樣一個數組開始,但我離題了......這是另一個話題。)