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: Wed, 07 Jun 2006 18:56:11 +0200
- Message-id: <4487052B(dot)406(at)stratum-ip(dot)net>
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.
Home |
Main Index |
Thread Index