0

У меня есть столбец массива, который является частью уникальной проверки в рельсах.Индекс Uniq на столбце массива в postgres (Rails)

Итак, стол со столбцами a, b, c, d, e.

проверки: validates_uniqueness_of: д, объем: [: а,: Ь]

Теперь, поскольку у меня есть несколько рельсов сервера, иногда было бы повторяющиеся строки в таблице, поскольку нет уровня БД ограничений. Подробнее об этом: http://robots.thoughtbot.com/the-perils-of-uniqueness-validations/

Итак, Я пытаюсь добавить уникальный индекс на столе, как это: add_index: стол, [ «а», «б», «d»], уникальный: правда, с использованием :: gin

Я использую джин. См http://www.postgresql.org/docs/current/static/gin-intro.html Can PostgreSQL index array columns?

Однако

кажется, что я все еще в состоянии добавить повторяющиеся строки после выполнения дб: мигрировать. Я предполагаю, что это связано с тем, что уникальный индекс в массиве не работает.

Любые указатели?

Спасибо!

  • Я использую Rails4
  • Нормализацию таблицы не вариант в настоящее время

ответ

1

Best я знаю, Postgres будет только обеспечивать ограничение уникальности с использованием индекса ВТКЕЯ. Таким образом, ваш код создания индекса либо бесшумно игнорирует, либо молча игнорирует уникальную часть его определения.

Другое соображение, которое необходимо иметь в виду, это то, что array[1,2,3] <> array[3,2,1] в отношении Postgres. Чтобы обеспечить правильную проверку подлинности, вы также можете применить ограничение к массиву, чтобы отклонить несортированные значения.

(Еще лучше, вы должны нормально нормализовать свои данные, чтобы избежать использования такого массива для начала, но я отвлекаюсь ... это совсем другая тема.)

Смежные вопросы