2016-07-03 2 views

답변

0

PostgreSQL에는 시스템 카탈로그 pg_constraint이 있습니다.

카탈로그 pg_constraint는 확인, 기본 키, 고유, 외부 키 및 제외 조건을 테이블에 저장합니다. (열 제한은 특별히 처리 된 이 아니며 모든 열 제약 조건은 일부 테이블 제약 조건과 동일합니다.) null이 아닌 제약 조건은 pg_attribute 카탈로그에 표시되며 여기에는 표시되지 않습니다.

사용자 정의 제한 조건 트리거 (CREATE CONSTRAINT TRIGGER로 작성)도이 테이블에 항목을 생성합니다.

도메인의 제약 조건도 여기에 저장됩니다.

SELECT 
    * 
FROM 
    pg_constraint 
WHERE 
    contype = 'c' AND -- check constraint 
    conrelid != 0 AND -- table constraint 
    conname = 'my_check'; 

contype 열은 제약 타입을 포함 c 체크 제약위한 것이다. conrelid 열에는이 제약 조건이 적용되는 테이블의 oid, 테이블 제약 조건이 아닌 경우 0이 포함됩니다. 오라클 기본보기를 들어

+0

감사합니다 순전히, 나는 단지 제약 탭 -을 확인하기위한 특정 쿼리를 찾고 있어요 레벨, 그것이 존재하는지 나는 모른다. 이 쿼리를 사용하면 모든 제약 조건을 얻을 수 있으며 탭 수준 검사 제약 조건도 없습니다. – WhiteShadow

+0

그래, 테이블 점검 제약 조건 만 선택하도록 내 대답을 업데이트했습니다. "특정 검사 제약 조건"이 의미하는 바를 설명하십시오. 누락 된 수표를 찾으시겠습니까? – Adam

+0

내가 잘 설명하는지 잘 모르겠다. 나는 단지 conname의 이름을 모른다는 테이블 수준의 체크 제약만을 원한다. 예 : BONUS 및 TAX라는 두 개의 변수가있는 테이블 EMP가 있으며 BONUS> TAX 인 테이블 수준 검사 제약 조건이 있습니다. 나는 단지이 제약 조건을 원하지만 pg_constraint에서 쿼리가 테이블 수준의 CHECK 제약 조건인지 또는 열 수준의 CHECK 제약 조건인지를 확인할 수 없다. 내가 그걸 아주 잘 설명했는지 모르겠다. 미안해! – WhiteShadow

0

이 특정 테이블의 특정 제약 얻기 위해, ALL_CONSTRAINTS

쿼리입니다 : 귀하의 답변에 대한

SELECT * 
    FROM all_constraints 
WHERE constraint_name LIKE upper('%&your_costraint%') 
    AND table_name LIKE upper('%&your_table%'); 
+0

고맙습니다. 제약 조건 이름을 알지 못하고 check 제약 조건 tab_level에 대한 특정 쿼리를 찾고 있습니다. 당신의 방식대로 나는 테이블의 모든 제약 조건을 얻습니다. – WhiteShadow

+0

CHECK 제약 조건 만 찾으려면 column ** constraint_type **을 사용하십시오. SELECT * FROM all_constraints WHERE table_name LIKE upper ('% & your_table %') AND constraint_type = 'C';' –

관련 문제