check for primary key

Lists: pgsql-general
From: Tom Brown <brown(at)esteem(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: check for primary key
Date: 2009-11-09 19:19:56
Message-ID: 1257794396.18623.415.camel@brown.esteem.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-general

Hey guys!

I would like to know how to query for the existence of a primary key on
a table. All of the tables have the column 'id' in them. That should be
the primary key. However, the primary key constraint got "lost" somehow.
Probably due to stupidity on my part.

I just want to add back the primary key constraint to the tables that
lost it. I want to query for the existance of it first, so I don't
produce an error when I do an 'ALTER TABLE ...' statement.

Any suggestions appreciated.

Thanks!
Tom


From: Thom Brown <thombrown(at)gmail(dot)com>
To: brown(at)esteem(dot)com
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: check for primary key
Date: 2009-11-09 20:58:57
Message-ID: bddc86150911091258q6f899564r697edb53d4ddffbe@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-general

2009/11/9 Tom Brown <brown(at)esteem(dot)com>:
> Hey guys!
>
> I would like to know how to query for the existence of a primary key on
> a table. All of the tables have the column 'id' in them. That should be
> the primary key. However, the primary key constraint got "lost" somehow.
> Probably due to stupidity on my part.
>
> I just want to add back the primary key constraint to the tables that
> lost it. I want to query for the existance of it first, so I don't
> produce an error when I do an 'ALTER TABLE ...' statement.
>
> Any suggestions appreciated.
>
> Thanks!
> Tom

You could try:

SELECT COUNT(*)
FROM pg_class
INNER JOIN pg_constraint ON pg_class.oid = pg_constraint.conrelid
WHERE pg_constraint.contype = 'p'
AND pg_class.relname = 'my_table';

...replacing my_table with the table name. If it returns 1, it has a
primary key. Or use * instead of COUNT(*) and use no rows being
returned as a lack of primary key.

Regards

Thom Brown (hey, we have the same name!)