I needed theses Statements, and i think tey could be usefull to
others.
I hate the non-oracle outer joins, so i implemented the the nullable
fields wit a subselect. If someone will rewrite that, please mail the
new statements to c.gausepohl(at)arcusx.com

so here comes the script:
--list of tables for user loged on
select tablename from pg_tables
where tableowner=user
order by tablename;


--primary keys from table xyz?
select cl.relname, co.conname, apk.attname as pk_attribute_0,
       (select attname from pg_attribute where attnum=co.conkey[2] and
attrelid=cl.oid) as pk_attribute_1,
       (select attname from pg_attribute where attnum=co.conkey[3] and
attrelid=cl.oid) as pk_attribute_2,
       (select attname from pg_attribute where attnum=co.conkey[4] and
attrelid=cl.oid) as pk_attribute_3,
       (select attname from pg_attribute where attnum=co.conkey[5] and
attrelid=cl.oid) as pk_attribute_4,
       (select attname from pg_attribute where attnum=co.conkey[6] and
attrelid=cl.oid) as pk_attribute_5,
       (select attname from pg_attribute where attnum=co.conkey[7] and
attrelid=cl.oid) as pk_attribute_6,
       (select attname from pg_attribute where attnum=co.conkey[8] and
attrelid=cl.oid) as pk_attribute_7
from   pg_constraint co, pg_class cl, pg_attribute apk
where  contype = 'p'
  and  cl.oid = co.conrelid
  and cl.relname = 'xyz'
  and apk.attrelid=cl.oid
  and apk.attnum = co.conkey[1];

  
--alternate keys from table xyz?
select ak.relname,  
        att.attname as Column_Name0,  
        (SELECT attname FROM pg_attribute WHERE attrelid =
relation.oid  and attnum=ind.indkey[1]) as Column_Name1,
        (SELECT attname FROM pg_attribute WHERE attrelid =
relation.oid  and attnum=ind.indkey[2]) as Column_Name2,
        (SELECT attname FROM pg_attribute WHERE attrelid =
relation.oid  and attnum=ind.indkey[3]) as Column_Name3,
        (SELECT attname FROM pg_attribute WHERE attrelid =
relation.oid  and attnum=ind.indkey[4]) as Column_Name4,
        (SELECT attname FROM pg_attribute WHERE attrelid =
relation.oid  and attnum=ind.indkey[5]) as Column_Name5,
        (SELECT attname FROM pg_attribute WHERE attrelid =
relation.oid  and attnum=ind.indkey[6]) as Column_Name6,
        (SELECT attname FROM pg_attribute WHERE attrelid =
relation.oid  and attnum=ind.indkey[7]) as Column_Name7
 from   pg_index ind, pg_class relation, pg_class ak, pg_attribute att
 where  ind.indrelid=relation.oid  
   and  relation.relname = 'xyz'
   and  ind.indisprimary = 'f'  
   and  ind.indisunique = 't'  
   and  ind.indexrelid = ak.oid 
   and  att.attnum = ind.indkey[0] and att.attrelid = relation.oid

--detailed list for columns of table xyz?
select att.attname as column_name, 
       att.attnotnull as nullable,
       typ.typname as data_type, 
       att.attlen, 
       typ.typrelid,
       att.atttypmod-4 as data_length,
       (att.atttypmod-4)/65535 as data_precision,
       (att.atttypmod-4)%65536 as data_scale,
       d.description as description,
       att.attnum as column_id
from   pg_attribute att, pg_class cls, pg_type typ, pg_description d
where  d.objoid = cls.oid
  and  att.attrelid = cls.oid 
  and  typ.oid = att.atttypid
  and  att.attnum>=1
  and  cls.relname = 'xyz'
order by cls.relname, att.attnum;  


--out references for table xyz
select rel.relname as table_name, fk.conname as fk_constraint_name,
frel.relname as target_table_name,
       fk.conkey[1], fk.confkey[1],
       att_fk0.attname as fk_part_0,
       att_pk0.attname as pk_part_0,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
rel.oid and att.attnum=fk.conkey[2]) as fk_part_1,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
frel.oid and att.attnum=fk.confkey[2]) as pk_part_1,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
rel.oid and att.attnum=fk.conkey[3]) as fk_part_2,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
frel.oid and att.attnum=fk.confkey[3]) as pk_part_2,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
rel.oid and att.attnum=fk.conkey[4]) as fk_part_3,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
frel.oid and att.attnum=fk.confkey[4]) as pk_part_3,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
rel.oid and att.attnum=fk.conkey[5]) as fk_part_4,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
frel.oid and att.attnum=fk.confkey[5]) as pk_part_4,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
rel.oid and att.attnum=fk.conkey[6]) as fk_part_5,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
frel.oid and att.attnum=fk.confkey[6]) as pk_part_5,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
rel.oid and att.attnum=fk.conkey[7]) as fk_part_6,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
frel.oid and att.attnum=fk.confkey[7]) as pk_part_6,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
rel.oid and att.attnum=fk.conkey[8]) as fk_part_7,
       (SELECT att.attname FROM pg_attribute att WHERE att.attrelid =
frel.oid and att.attnum=fk.confkey[8]) as pk_part_7
from pg_constraint fk, pg_class rel, pg_class frel,
     pg_attribute att_fk0, pg_attribute att_pk0
where fk.contype='f'
  and rel.oid = fk.conrelid
  and frel.oid = fk.confrelid
  and rel.relname = 'xyz'
  and att_fk0.attrelid = rel.oid and att_fk0.attnum=fk.conkey[1]
  and att_pk0.attrelid = rel.oid and att_pk0.attnum=fk.confkey[1]
order by table_name, target_table_name;


--in reference for table xyz...
select cl_rel.relname as table_name, 
       co.conname, 
       cl_frel.relname as target_table_name,
       att_fk_0.attname as fk_part_0,
       att_pk_0.attname as pk_part_0,
       (select att.attname from pg_attribute att where att.attrelid =
cl_rel.oid and att.attnum = co.conkey[2]) as fk_part_1,
       (select att.attname from pg_attribute att where att.attrelid =
cl_frel.oid and att.attnum = co.confkey[2]) as pk_part_1,
       (select att.attname from pg_attribute att where att.attrelid =
cl_rel.oid and att.attnum = co.conkey[3]) as fk_part_2,
       (select att.attname from pg_attribute att where att.attrelid =
cl_frel.oid and att.attnum = co.confkey[3]) as pk_part_2,
       (select att.attname from pg_attribute att where att.attrelid =
cl_rel.oid and att.attnum = co.conkey[4]) as fk_part_3,
       (select att.attname from pg_attribute att where att.attrelid =
cl_frel.oid and att.attnum = co.confkey[4]) as pk_part_3,
       (select att.attname from pg_attribute att where att.attrelid =
cl_rel.oid and att.attnum = co.conkey[5]) as fk_part_4,
       (select att.attname from pg_attribute att where att.attrelid =
cl_frel.oid and att.attnum = co.confkey[5]) as pk_part_4,
       (select att.attname from pg_attribute att where att.attrelid =
cl_rel.oid and att.attnum = co.conkey[6]) as fk_part_5,
       (select att.attname from pg_attribute att where att.attrelid =
cl_frel.oid and att.attnum = co.confkey[6]) as pk_part_5,
       (select att.attname from pg_attribute att where att.attrelid =
cl_rel.oid and att.attnum = co.conkey[7]) as fk_part_6,
       (select att.attname from pg_attribute att where att.attrelid =
cl_frel.oid and att.attnum = co.confkey[7]) as pk_part_6,
       (select att.attname from pg_attribute att where att.attrelid =
cl_rel.oid and att.attnum = co.conkey[8]) as fk_part_7,
       (select att.attname from pg_attribute att where att.attrelid =
cl_frel.oid and att.attnum = co.confkey[8]) as pk_part_7
from pg_constraint co, pg_class cl_rel, pg_class cl_frel, pg_attribute
att_fk_0, pg_attribute att_pk_0
where co.conrelid = cl_rel.oid 
 and co.confrelid = cl_frel.oid 
 and cl_frel.relname = 'acc_account_category'
 and att_fk_0.attnum = co.conkey[1] and att_fk_0.attrelid = cl_rel.oid
 and att_pk_0.attnum = co.confkey[1] and att_pk_0.attrelid =
cl_frel.oid;

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

Reply via email to