복붙노트

[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. ==============================

    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 ()에 대한 이유입니다.

  2. from https://stackoverflow.com/questions/18383810/find-referenced-fields-of-foreign-key-constraint by cc-by-sa and MIT license