pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Svenne Krap <svenne.lists@krap.dk>
To: sql pgsql <pgsql-sql@postgresql.org>
Subject: Foreign key columns
Date: Thu, 05 Nov 2009 22:08:09 +0100
Message-ID: <4AF33EB9.4060901@krap.dk> (raw)

Hi.

Is there a simple way to get foreign key data... for example I found a
view, that does what I want ...

It delivers

   fk_table   |     fk_column      |     pk_table      | pk_column |           constraint_name

--------------+--------------------+-------------------+-----------+--------------------------------------

 organisation | customer_rep       | person            | id        | organisation_customer_rep_fkey

 organisation | ekstra_skema       | ekstra_skema      | id        | org_schema_fkey

 organisation | in_group           | organisation      | id        | organisation_in_group_fkey

 organisation | org_paying_company | organisation      | id        | organisation_org_paying_company_fkey

 organisation | primary_contact    | person            | id        | primary_contact_fkey

 organisation | type               | organisation_type | id        | organisation_type_fkey



The query in question is

SELECT FK.TABLE_NAME as FK_Table, CU.COLUMN_NAME as FK_Column,
PK.TABLE_NAME as PK_Table, PT.COLUMN_NAME as PK_Column,
C.CONSTRAINT_NAME as Constraint_Name
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME
= FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON
C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME =
CU.CONSTRAINT_NAME
INNER JOIN (
     SELECT i1.TABLE_NAME, i2.COLUMN_NAME FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON
i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
        WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY') PT ON PT.TABLE_NAME =
PK.TABLE_NAME WHERE FK.TABLE_NAME='organisation' ORDER BY 1,2,3,4;


The only problem is that this query is sloooooow, runs in tens of seconds...


Is there a good native (i.e. fast) pgsql-query to find that type of
information?

Svenne



view thread (2+ messages)  latest in thread

Message-ID: <4AF33EB9.4060901@krap.dk>
Permalink:  ../4AF33EB9.4060901@krap.dk/
Also on:    postgresql.org/message-id/4AF33EB9.4060901@krap.dk

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: svenne.lists@krap.dk
  Subject: Re: Foreign key columns
  In-Reply-To: <4AF33EB9.4060901@krap.dk>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox