Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/04/2007, 20h23   #1
Membre éclairé
 
Avatar de deY!
 
Inscription : avril 2006
Messages : 403
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 403
Points : 358
Points : 358
Par défaut [SQL] Catalogues systemes

Bonjour,

Je souhaiterais récuperer la liste des champs d'une table à l'aide d'une requête.
Je me retrouve avec ça :

Code :
1
2
3
4
5
6
SELECT attname, typname, attnotnull
FROM pg_attribute pa
LEFT JOIN pg_type pt ON pt.oid = pa.atttypid
LEFT JOIN pg_class pc ON pc.oid = pa.attrelid
WHERE pc.relname = 'branches'
AND pa.attnum > 0
Fonctionne nickel, cependant, il me manque une chose, et j'ai beau chercher dans les différent catalogues proposés, je ne trouve pas ce qui me convient.
Je voudrais savoir si le champ est une clé primaire de la table, pour l'exemple il s'agit de la table branches, mais bien entendu dans mon code, c'est une variable.

Bref, je veux la liste des champs d'une table.
Nom Type NotNul et Pk

apparement pg_constraint serait la voie, mais je ne vois pas comment le lier avec pg_attribute, puisque le champ pg_constraint.conkey est de type int2[] et que pg_attribute.attnum est de type int2.

Si je fait une joiture sur la table cela ne convient, je veux ciblé le resultat sur le champ.

Merci d'avance.
__________________
deY!
deY! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 10h49   #2
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Bonjour

pour recuperer les champs et les contraintes de tables il faut utiliser le schema information_schema et taper dans les vues tables et tables_constraints
__________________
Christophe Chauvet (KrysKool)
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 11h10   #3
Membre éclairé
 
Avatar de deY!
 
Inscription : avril 2006
Messages : 403
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 403
Points : 358
Points : 358
Oui mais non...

Ce que je veux c'est une liste de champs... Et pour chaque enregistrement qu'il soit indiqué s'il s'agit d'une clé primaire ou non.
Je veux lié ma liste de contraintes avec ma liste de colonnes.
__________________
deY!
deY! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 15h16   #4
Membre éclairé
 
Avatar de deY!
 
Inscription : avril 2006
Messages : 403
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 403
Points : 358
Points : 358
Aprés risque de pendaison en fibre optique voilà ce que j'ai pondu... et qui fonctionne...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT c.column_name, c.data_type, c.is_nullable, CAST('t' AS BOOLEAN) AS is_pk
FROM information_schema.COLUMNS c
LEFT JOIN information_schema.constraint_column_usage cc ON cc.column_name = c.column_name
WHERE c.table_name = 'services'
AND cc.constraint_name = 'pk_'||c.table_name
UNION
SELECT c.column_name, c.data_type, c.is_nullable, CAST('f' AS BOOLEAN) AS is_pk
FROM information_schema.COLUMNS c
WHERE c.table_name = 'services'
AND c.column_name NOT IN (SELECT c.column_name
			FROM information_schema.constraint_column_usage c
			WHERE c.table_name = 'services'
			AND c.constraint_name = 'pk_'||c.table_name)
YaHa... Si quelqu'un trouve plus simple... Je suis preneur aussi...
__________________
deY!
deY! est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h05.


 
 
 
 
Partenaires

Hébergement Web