2017-08-22 3 views
4

Je suis venu avec la requête suivante qui me fournit les noms de colonnes avec ses types de données mais ne me fournit pas le type de référence (à savoir si la colonne est une clé primaire ou une clé étrangère).Comment puis-je obtenir le nom de la colonne avec son type de référence (c'est-à-dire PRIMARY KEY & FOREIGN KEY) dans une seule requête POSTGRESQL?

select column_name, data_type,character_maximum_length,is_nullable 
from information_schema.columns 
where table_name ='employee'; 

Ceci est la sortie que je reçois:

column_name |  data_type  | character_maximum_length | is_nullable 
-------------+-------------------+--------------------------+------------- 
empno  | character varying |      10 | NO 
full_name | character varying |      30 | YES 
city  | character varying |      9 | YES 
gender  | character   |      7 | YES 

que quelqu'un peut me aider obtenir le reference_type (i.e. PRIMARY_KEY & FOREIGN_KEY) ainsi que pour la requête?

+0

S'il vous plaît ne [pas crosspost] (http://meta.stackexchange.com/q/64068/157328) Aussi demandé sur dba.stackexchange: https://dba.stackexchange.com/q/184065/1822 –

+0

@a_horse_with_no_name: personne n'a répondu à l'administrateur de la base de données donc a été obligé de l'afficher ici dans le principal. –

+0

@sagi: Je ne pense vraiment pas que ma question soit une copie de celle sur laquelle vous avez posté le lien. Ce que je cherche, c'est d'avoir la colonne des tables avec leur type de référence. J'avais déjà visité https://wiki.postgresql.org/wiki/Retrieve_primary_key_columns mais cela n'a vraiment pas rempli mon but, donc posté la question en fonction de celle qui répondait à mes besoins. –

Répondre

2

Vous pouvez essayer ceci:

select c.column_name, c.data_type, c.character_maximum_length, c.is_nullable, s.constraint_name, t.constraint_type 
    from information_schema.columns c 
    left join information_schema.key_column_usage s on s.table_name = c.table_name and s.column_name = c.column_name 
    left join information_schema.table_constraints t on t.table_name = c.table_name and t.constraint_name = s.constraint_name 
    where c.table_name ='employee' 

Jetez un oeil à ce lien https://www.postgresql.org/docs/9.1/static/information-schema.html

+0

@a_horse_with_no_name & N.Dov: Bullseye ... C'est exactement ce que je cherchais. Merci une tonne Man :) :) :) –