Skip to content

Instantly share code, notes, and snippets.

@rednafi
Created November 8, 2021 23:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rednafi/5a24434b90fd1871d315104e8e777669 to your computer and use it in GitHub Desktop.
Save rednafi/5a24434b90fd1871d315104e8e777669 to your computer and use it in GitHub Desktop.
WITH foreign_keys
     AS (SELECT conname,
                conrelid,
                confrelid,
                Unnest(conkey)  AS CONKEY,
                Unnest(confkey) AS CONFKEY
         FROM   pg_constraint
         WHERE  contype = 'F'
        -- AND CONFRELID::REGCLASS = 'YOUR_TABLE'::REGCLASS
        )
-- IF CONFRELID, CONNAME PAIR SHOWS UP MORE THAN ONCE THEN IT IS MULTICOLUMN FOREIGN KEY
SELECT FK.conname               AS CONSTRAINT_NAME,
       FK.confrelid :: regclass AS REFERENCED_TABLE,
       AF.attname               AS PKCOL,
       FK.conrelid :: regclass  AS REFERENCING_TABLE,
       A.attname                AS FKCOL
FROM   foreign_keys FK
       join pg_attribute AF
         ON AF.attnum = FK.confkey
            AND AF.attrelid = FK.confrelid
       join pg_attribute A
         ON A.attnum = conkey
            AND A.attrelid = FK.conrelid
WHERE  FK.confrelid :: regclass = 'PUBLIC.CLIENTS_CLIENT' :: regclass
ORDER  BY FK.confrelid,
          FK.conname;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment