Lists: | pgsql-fr-generale |
---|
From: | Laurent Mesuré <laurent(dot)mesure(at)free(dot)fr> |
---|---|
To: | pgsql-fr-generale <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | determiner les champ de clef primaire d'une table |
Date: | 2006-05-31 21:06:18 |
Message-ID: | 447E054A.2020506@free.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjur,
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
Merci
Laurent
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-02 08:22:28 |
Message-ID: | 447FF544.6030709@stratum-ip.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
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")
From: | Laurent Mesuré <laurent(dot)mesure(at)free(dot)fr> |
---|---|
To: | pgsql-fr-generale <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: determiner les champ de clef primaire d'une |
Date: | 2006-06-05 17:06:30 |
Message-ID: | 44846496.6000208@free.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
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
laurent
From: | "Daniel Verite" <daniel(at)manitou-mail(dot)org> |
---|---|
To: | "Laurent =?ISO-8859-15?Q?Mesur=E9?=" <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-05 17:44:53 |
Message-ID: | 20060605194500.20524 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Laurent Mesuré wrote:
> >> 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.
Pour le nombre des champs, c'est pg_index.indnatts
Pour aller chercher les champs un par un, il y a une fonction
pg_catalog.pg_get_indexdef qui prend en argument le numéro de colonne
en commençant par 1, et qui renvoie le nom du champ, en gros.
Voir http://docs.postgresqlfr.org/8.1/functions-info.html
Et sinon dans psql, il est possible de faire
\set ECHO_HIDDEN pour voir les requêtes construites par psql pour
répondre aux commandes du type \d
C'est très utile pour apprendre des choses sur tout ce qui est
relatif au catalogue des données.
--
Daniel
PostgreSQL-powered mail user agent and storage: http://www.manitou-mail.org
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 |
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.