Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-fr-generale by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group