Re: determiner les champ de clef primaire d'une

From: Stéphane BUNEL <stephane(at)stratum-ip(dot)net>
To: Laurent Mesuré <laurent(dot)mesure(at)free(dot)fr>
Cc: pgsql-fr-generale <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: determiner les champ de clef primaire d'une
Date: 2006-06-07 16:56:11
Message-ID: 4487052B.406@stratum-ip.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Laurent Mesuré a écrit :
> Stéphane BUNEL a écrit :
>
>> Laurent Mesuré a écrit :
>>
>>> Bonjur,
>>
>>
>> Bonjour,
>>
>>> ayant une table je voudrais extraire la liste des champs de la clef
>>> primaire.
>>>
>>> j'"essaye avec les tables pg_class,pg_index, mais du coup je me
>>> trouve confronté au type int2vector. Du coup, je suis sur qu'il y a
>>> surement une methode plus simple, mais je ne la trouve pas.
>>>
>>>
>>> Si quelqu'un a une idée
>>
>>
>> Quelle version de PG utilisez-vous ?
>>
>> Quel est votre contexte ? Pour un besoin _ponctuel_, psql vous
>> renseignera par la commande \d <nom_table>. De là un grep peux suffire
>> à isoler les informations recherchés.
>>
>> ex:
>>
>> safari=# \d library
>> Table "public.library"
>> Column | Type | Modifiers
>> --------+------+-----------
>> key | text | not null
>> value | text |
>> Indexes:
>> "library_pkey" PRIMARY KEY, btree ("key")
>>
>>
>>
>>
> Non j'en ai besoin de facon recurrente. Dans une application j'ai besoin
> d'extraire les champs de clef primaire pour la construction d'objet (en
> php en fait). Du coup, il me faut bien passer par un SELECT.
>
> postgresql 8.1 pour la version

Pour inspiration j'ai testé avec un PG8.0 cette requête :

SELECT
ns.nspname as "le schema", cl.relname as "a la table", co.conname as
"avec une cle primaire", at.attname as "colonne"
FROM
pg_constraint co
JOIN pg_class cl
ON cl.oid = co.conrelid AND co.contype = 'p'
JOIN pg_namespace ns
ON ns.oid = co.connamespace
JOIN pg_attribute at
ON at.attrelid = co.conrelid AND at.attnum = ANY( co.conkey )

Qui donne une ligne pour chaque colonne appartenant à la clé primaire
d'une table : le schema | a la table | avec une
cle primaire | colonne
------------------+-------------------------+------------------------------+-------------------
public | person_title | person_title_pkey
| person_title_id
public | contract_type | contract_type_pkey
| contract_type_id
public | department | department_pkey
| department_id
(...)
service_mail | forward | forward_pkey
| ref_box_id
service_mail | forward | forward_pkey
| address
service_mail | domain | domain_pkey
| domain_id

Stéphane.

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message c.maumont 2006-06-12 14:05:34 PB avec pgadmin.
Previous Message Stéphane 2006-06-06 20:59:59 Re: Lenteurs inexpliquées