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.
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 |