Re: primary keys

From: Klint Gore <kg(at)kgb(dot)une(dot)edu(dot)au>
To: Orion Henry <lab(at)orangekids(dot)org>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: primary keys
Date: 2006-04-20 03:38:06
Message-ID: 4447021E23B.9BA8KG@129.180.47.120
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, 19 Apr 2006 19:39:45 -0700, Orion Henry <lab(at)orangekids(dot)org> wrote:
> I'm trying to craft a query that will determine what column(s) are the
> primary key for a given table. I have succeeded but the query is so
> ugly that it borders on silly and cannot work for an arbitrary number of
> tables since indkey is an int2vect and the ANY keyword does not work on
> it.
>
> Please tell me there's an easier way to do this. Here is the query for
> tablename $table.
>
> SELECT attname
> FROM pg_index
> JOIN pg_class ON (indrelid = pg_class.oid)
> JOIN pg_attribute ON (attrelid = pg_class.oid)
> WHERE indisprimary IS TRUE
> AND (attnum = indkey[0] OR attnum = indkey[1] OR attnum = indkey[2])
> AND relname = '$table';
>
> Orion

works for me on version 8.1.3

SELECT attname
FROM pg_index
JOIN pg_class ON (indrelid = pg_class.oid)
JOIN pg_attribute ON (attrelid = pg_class.oid)
WHERE indisprimary IS TRUE
AND attnum = any(indkey)
AND relname = $tablename;

or on v7 you could try

select pcl.relname,
(select array_accum(attname) from pg_attribute where attrelid = pco.conrelid and attnum = any(pco.conkey)) as cols
>from pg_constraint pco
join pg_class pcl on pcl.oid = pco.conrelid
where pcl.relname = $tablename
and pco.contype = 'p'

klint.

+---------------------------------------+-----------------+
: Klint Gore : "Non rhyming :
: EMail : kg(at)kgb(dot)une(dot)edu(dot)au : slang - the :
: Snail : A.B.R.I. : possibilities :
: Mail University of New England : are useless" :
: Armidale NSW 2351 Australia : L.J.J. :
: Fax : +61 2 6772 5376 : :
+---------------------------------------+-----------------+

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Shoaib Mir 2006-04-20 03:43:00 problem while adding a column
Previous Message Tom Lane 2006-04-20 03:18:48 Re: locating a primary key