[SQL] 외래 키 제약 조건의 참조 필드 (들)을 찾기
SQL외래 키 제약 조건의 참조 필드 (들)을 찾기
나는 기본 키 필드 organisation_id와 테이블 조직에 외래 키 필드라는 ORG_ID있는 테이블 사용자가 있습니다. 테이블 이름 (사용자) 및 필드 이름 (users.org_id)을 알고, 나에게 이름과 필드 ORG_ID 참조 있음을 알 수 있습니다 쿼리가?
내가 찾아낸 유래 포스트 쿼리가 참조 된 테이블 이름을 결정하기 위해 제공되었다, 그러나 나는 또한 참조되는 필드 이름을 알 필요가있는 곳과 유사한
SELECT c.confrelid::regclass::text AS referenced_table
,c.conname AS fk_name
,pg_get_constraintdef(c.oid) AS fk_definition
FROM pg_attribute a
JOIN pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum)
WHERE a.attrelid = '"Schema"."Users"'::regclass -- table name
AND a.attname = 'org_id' -- column name
AND c.contype = 'f'
ORDER BY conrelid::regclass::text, contype DESC;
그래서 위의 질의는 테이블 (조직)의 FK 이름과 FK 정의의 이름을 반환합니다. 또한 참조되는 필드의 이름을 얻을 수있는 방법이 있나요? 나는 아마 테이블을 주어진 PK의 이름을 확인하는 또 다른 쿼리를 수행 할 수 있습니다 알고 있지만 나는이 여러 쿼리를 수행하지 않도록하고 싶습니다.
해결법
-
==============================
1.이 쿼리는 외래 키 제약 조건에 참조 된 열 (들)을 추가합니다 :
이 쿼리는 외래 키 제약 조건에 참조 된 열 (들)을 추가합니다 :
SELECT c.confrelid::regclass::text AS referenced_table ,string_agg(f.attname, ', ') AS referenced_columns ,c.conname AS fk_name ,pg_get_constraintdef(c.oid) AS fk_definition FROM pg_attribute a JOIN pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum) JOIN pg_attribute f ON f.attrelid = c.confrelid AND f.attnum = ANY (confkey) WHERE a.attrelid = '"Schema"."Users"'::regclass -- table name AND a.attname = 'org_id' -- column name AND c.contype = 'f' GROUP BY c.confrelid, c.conname, c.oid;
FK 제약 여러 열을 참조 할 수있다. 즉, 쿼리에서 집계 함수 string_agg ()에 대한 이유입니다.
from https://stackoverflow.com/questions/18383810/find-referenced-fields-of-foreign-key-constraint by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 고유의 페이지 뷰를 추적하기위한 PHP 세션 (0) | 2020.07.19 |
---|---|
[SQL] 즉 임의의 숫자를 변환 [중복] (0) | 2020.07.19 |
[SQL] 어떻게 동시 액세스에 테이블의 행의 특정 NR를 표시합니다 (0) | 2020.07.19 |
[SQL] 여러 자체 조인 결과에 GROUP에 따라 (0) | 2020.07.19 |
[SQL] 포스트 그레스는 - 어디에서 (목록) - 열이 존재하지 않습니다 (0) | 2020.07.19 |