2016-08-11 7 views
0

저는 각 열에서 사용하는 제약 조건 유형을 포함하여 데이터베이스의 모든 유형의 데이터를 수집해야하는 무언가를 만들고 있습니다. 아쉽게도 열에 제약 조건을 추가하는 두 가지 방법이 있습니다 (또는 더 많이 알지 못합니다). UNIQUE 제약 조건을 추가하거나 INDEX에 UNIQUE를 추가 할 수 있습니다.인덱스에 대한 제약 조건을 얻는 방법은 무엇입니까?

내가이 쿼리가 :

select * from information_schema.table_constraints WHERE constraint_type='UNIQUE';

그러나 문제는 그것이 INDEX에 적용되는 UNIQUE 제약 조건을 감지하지 않는다는 것입니다, 그것은 단지 예를 들어, 자신의 고유 제한 조건을 감지를, 그것은 할 수 없습니다 이 찾기 :

Indexes: "index_videos_on_slug" UNIQUE, btree (slug)

는 아무도 내가이 정보를 얻을 수있는 방법을 알고 있나요? 감사. pg_catalog 스키마

  • information_schema 라이브

  • +0

    'pg_index.indisunique'합니다 (pg_catalog 스키마) : 제한 조건에 대한 기존의 인덱스를 홍보하려는 경우, 당신은 alter ... using ... 구문을 사용할 수 있습니다 pg_catalog의 요소들만 포함하고 있습니다) – joop

    +0

    @joop, 저는 정말로 여러분이 대답으로 게시해야한다고 생각합니다. – e4c5

    +0

    흠, 그 정보를 테이블과 컬럼 이름에 연결하는 방법은 어떻게됩니까? 내가 질의 할 때 엿 같은 생각처럼 보입니다. 나는 relid를 어떻게 든 연결해야한다고 생각하니? – b0xxed1n

    답변

    1
    • the postgres catalogs
    • INFORMATION_SCHEMA가 완료되면 ANSI위원회에 의해 결정됩니다 만 물건이 구현되지 ((뷰 세트로)이 위에 구축
    • 인덱스는 SQL (하지만 대부분의/모든 SQL 구현의 일부가 아닌 모든 구현의 GCD) 더 많거나 적은

    )을 가지고

    pg_index.indisunique (pg_catalog 스키마에 있음)은 원하는 것입니다.

    은 BTW : information_schema`가 상단에 내장되어`참고

    ALTER TABLE ... ADD constraint ... USING your_index_name; 
    
    +0

    감사합니다. 'pg_index'에서'indexrelid'를 가리키는'pg_stat_all_indexes '를 찾았습니다.'t'' 또는'f'를'indisunique'로 검사하는 것만 큼 문제가됩니다. 당신이 더 좋은 방법을 생각할 수 있다면, 저에게 알려주십시오. – b0xxed1n

    +0

    특히 개발/테스트/다른 스키마가있는 경우에는 schemaname (pg_namespace)을 확인하는 것을 잊지 마십시오. – joop

    +1

    @ b0xxed1n''t''와''f''는 단지'true'와'false'를위한 텍스트 출력이므로''indisunique = 't'','WHERE indisunique = true' 그리고 단지'WHERE indisunique'는 모두 같은 것을 의미합니다. – IMSoP