Re: List prime key column names - Mailing list pgsql-general

From CN
Subject Re: List prime key column names
Date
Msg-id 1087526726.1876.198672942@webmail.messagingengine.com
Whole thread Raw
In response to List prime key column names  ("CN" <cnliou9@fastmail.fm>)
List pgsql-general
> I am trying to retrieve the column names that comprise primary key of a
> table.
> According to manual, pg_index.indkey is an array of indnatts whose usage
> I am unaware of.
>
> CREATE TABLE table1 (
> PRIMARY KEY (c1,c2),
> c1      SMALLINT,
> c2      VARCHAR(10),
> c3      VARCHAR(10)
> )WITHOUT OIDS;
>
> I need a SQL to list the following 2 rows:
>
> c1
> c2

The following SQL:

select attname
from pg_class,pg_index,pg_attribute
where relname='table1' and relkind='r' and relhaspkey
  and indrelid=pg_class.oid and indisprimary
  and attrelid=pg_class.oid and attnum = ANY (indkey)

gives error: "ERROR:  op ANY/ALL (array) requires array on right side"

Further tests show that this appears to work:

select attname
from pg_class,pg_index,pg_attribute
where relname='table1' and relkind='r' and relhaspkey
  and indrelid=pg_class.oid and indisprimary
  and attrelid=pg_class.oid and attnum IN
  (indkey[0],indkey[1],indkey[2].....indkey[63])

But is there any shortcut?

Regards,
CN

pgsql-general by date:

Previous
From: Tom Allison
Date:
Subject: Re: 7.4 windows version?
Next
From: Tom Allison
Date:
Subject: User Rights