Re: help with query

From: "Igor Neyman" <ineyman(at)perceptron(dot)com>
To: "Chris Hoover" <revoohc(at)gmail(dot)com>, <pgsql-admin(at)postgresql(dot)org>
Subject: Re: help with query
Date: 2007-08-17 18:50:13
Message-ID: F4C27E77F7A33E4CA98C19A9DC6722A202281841@EXCHANGE.corp.perceptron.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Why not use information_schema?

select prk.table_name AS PARENT_TABLE, prk.constraint_name AS PK,
tc.table_name AS CHILD_TABLE, refc.constraint_name AS FK
from information_schema.table_constraints prk,
information_schema.referential_constraints refc,
information_schema.table_constraints tc
where prk.table_catalog = refc.unique_constraint_catalog
and prk.constraint_type = 'PRIMARY KEY'
and prk.constraint_name = refc.unique_constraint_name
and tc.constraint_name = refc.constraint_name
and tc.constraint_type = 'FOREIGN KEY'
and tc.table_catalog = refc.constraint_catalog
order by prk.table_name , tc.table_name;

Igor

________________________________

From: pgsql-admin-owner(at)postgresql(dot)org
[mailto:pgsql-admin-owner(at)postgresql(dot)org] On Behalf Of Chris Hoover
Sent: Thursday, August 16, 2007 11:19 AM
To: pgsql-admin(at)postgresql(dot)org Admin
Subject: [ADMIN] help with query

I need a little bit of help. I need to use sql to pull any tables that
have the a foreign key referencing a given tables primary key.

So far I have come up with the listed query. It works great for single
column primary keys, but if a table has a multi column primary key, it
is returning to many rows. How can I get it to work for tables with
multi-column primary keys as well as single column primary keys?

Thanks,

Chris

select a.relname as table_name,
c.attname as column_name,
w.typname as domain_name
from pg_class a,
pg_constraint b,
pg_attribute c,
pg_type w
where a.oid = b.conrelid
and c.atttypid = w.oid
and c.attnum = any (b.conkey)
and a.oid = c.attrelid
and b.contype = 'f'
and a.relkind = 'r'
and c.attname in ( select z.attname
from pg_class x,
pg_constraint y,
pg_attribute z
where x.oid = y.conrelid
and z.attnum = any (y.conkey)
and x.oid = z.attrelid
and y.contype = 'p'
and x.relname = 'table' ) ;

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Pallav Kalva 2007-08-17 20:15:50 Invalid String enlargement
Previous Message Hyatt, Gordon 2007-08-17 18:47:26 Cannot read block x of relation a/b/c: Invalid argument