Re: List prime key column names
От | CN |
---|---|
Тема | Re: List prime key column names |
Дата | |
Msg-id | 1087526726.1876.198672942@webmail.messagingengine.com обсуждение исходный текст |
Ответ на | List prime key column names ("CN" <cnliou9@fastmail.fm>) |
Список | 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 по дате отправления: