부모 자식 테이블간 참조하는 FK컬럼 조회하는 쿼리가 아래와 같이 있씁니다.
SELECT tc.table_name AS child_table,
kcu.column_name AS child_colum,
ccu.table_name AS foreign_table,
ccu.column_name AS foreign_column
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu ON tc.constraint_name::text = kcu.constraint_name::text
JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name::text = tc.constraint_name::text
WHERE tc.constraint_type = 'FOREIGN KEY' and tc.table_schema = 'pvs' and tc.table_name = 'tsd'
pvs스키마에 있는 자식테이블인 tsd테이블이 어떤 부모테이블의 컬럼을 FK로 참조하는지 알수있는 쿼리인데 위 쿼리 결과로
child_table | child_colum | foreign_table | foreign_column
---------------+-----------------+------------------+---------------------
tsd | lcsm_code | tsh | hdate
tsd | hdate | tsh | hdate
tsd | lcsm_code | tsh | lcsm_code
tsd | hdate | tsh | lcsm_code
(4 rows)
결과가 이렇게 나오는데
실제 tsd(자식)테이블이 참조하는 tsh(부모)테이블의 컬럼은
자식 테이블의 lcsm code컬럼이 부모 테이블의 lcsm code 컬럼
자식 테이블의 hdate 컬럼이 부모 테이블의 hdate 컬럼을
이렇게 참조하고있습니다. 즉, 위 쿼리 실행 결과의 2,3번째 row뿐이고 1,4번째 row는 없어야할 값입니다.
쿼리문에 약하다보니.. 위쿼리에서 어느부분을 수정해줘야 아래서 올바른 값을 결과로 뽑는지가 궁금합니다..
|