locating a primary key

From: Orion <lab(at)orangekids(dot)org>
To: pgsql-general(at)postgresql(dot)org
Subject: locating a primary key
Date: 2006-04-20 02:46:45
Message-ID: 415a0600604191946k2a56a4adx2d2d537481c409dc@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I'm trying to craft a query that will determine what column(s) belong
to the primary key for a given table. This seems like the kind of
thing that would very common for people to try to do but my query was
rather ugly and not flexible since it does not work for an arbitrary
number of columns in the primary key. This is all due to the use of
the int2vect type on indkey which is undocumented and does not seem to
work with normal array tools such as ANY and cant be cast to int2[].

Please tell me there's an easier/better way to do this.

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

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2006-04-20 03:18:48 Re: locating a primary key
Previous Message Orion Henry 2006-04-20 02:39:45 primary keys