0

레일에 고유 한 유효성 검사의 일부인 배열 열이 있습니다.postgres (레일즈)의 배열 열에 대한 Uniq 인덱스

그래서 a, b, c, d, e.

확인 : validates_uniqueness_of : D, 범위 : [: A는 : B] 나는 여러 레일 서버가 있기 때문에 어떤 DB 수준의 제약이 없기 때문에

지금, 때로는 테이블에 중복 행이있을 것입니다. http://robots.thoughtbot.com/the-perils-of-uniqueness-validations/

그래서, 나는이 같은 테이블에 고유 인덱스를 추가하려고 : 사용 사실 : add_index 등 : 테이블, [ "A", "B", "D", 고유의 그것에 대한 자세한 : : 진

나는 진을 사용하고 있습니다. 이전 : 난 아직도 DB를 수행 한 후 중복 행을 추가 할 수 있어요처럼

보인다, 그러나 http://www.postgresql.org/docs/current/static/gin-intro.html Can PostgreSQL index array columns?

참조하십시오. 배열의 고유 인덱스가 작동하지 않았기 때문에 이것이라고 가정합니다.

모든 포인터?

감사합니다. 나는 테이블을 정규화 Rails4

  • 을 사용하고

    • 현재
  • 답변

    1

    내가 알고 있어요보다도, 포스트 그레스 만 BTREE 인덱스를 사용하여 고유 제한 조건을 적용 할 옵션을 선택하지 않습니다. 따라서 색인 생성 코드가 자동으로 정의의 고유 한 부분을 무시하거나 무시합니다.

    염두에 두어야 할 또 다른 고려 사항은 Postgres와 관련하여 array[1,2,3] <> array[3,2,1]입니다. 고유성 검증이 올바르게 수행되도록하려면 정렬되지 않은 값을 거부하도록 배열에 제약 조건을 적용해야 할 수도 있습니다.

    (더 나은 것은 데이터를 정상적으로 정규화하여 이러한 배열을 사용하지 않으려는 것입니다. 그러나 나는 다른 주제입니다.)