IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Récupérer la table cible d'une foreign key


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Récupérer la table cible d'une foreign key
    Bonjour à tous,

    J'aurais voulu savoir comment récupérer le nom de la table cible d'une contrainte foreign key.
    Je récupère déjà les infos de la foreign key d'une table avec cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select *
    from information_schema.key_column_usage
    where table_name='reference'
    Mais il n'est pas possible de connaître le nom de la table "visée" par cette contrainte. Et je ne peux pas me contenter de découper le nom de la contrainte car l'utilisateur peut lui donner un nom tout autre que du type "fk_nomtable_nomtabledistante".

    Quelqu'un aurait une idée ?

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je n'ai pas Postgresql sous la main donc je ne peux pas tester mais normalement le nom de la table référencée figure dans le texte de la contrainte après le mot-clé REFERENCES non ?

    Cherchez le texte de la contrainte dans les informations retournées par la requête et enduite utilisez les fonctions d'extraction de texte pour récupérer le nom de la table référencée.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Bonjour CinePhil,

    Oui le nom de la table de reference se trouve bien après le mot clé REFERENCES mais cela se situe au niveau de la requête de création de la table. Or, je cherche à interroger la base de données une fois la table créée depuis une appli exterieure (d'où l'utilisation d'une requête SQL).
    Sinon il est clair que je ne me serai pas autant cassé la tête

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Encore une fois je n'ai pas Postgresql sous la main mais dans l'information_schema.KEY_COLOUMN_USAGE de MySQL je vois les colonnes REFENRENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME et REFERENCED_COLUMN_NAME.

    Apparemment, cette vue dans Postgresql ne contient pas les mêmes données.

    Par contre en scrutant la liste des vues de ce schéma, je trouve constraint_column_usage qui semble contenir ce que tu cherches.

    Ça m'a prit 2 minutes pour trouver l'info !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Grâce à votre aide CinePhil, j'ai réussi à trouver la requête qui me sert à trouver, pour une table donnée, la liste de ses contraintes de type clé étrangère et de récupérer le nom de la table de reference ainsi que le nom du champ pk de la table de reference.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select b.table_name, b.column_name, a.constraint_name, a.table_name as table_ref, a.column_name as column_pk_ref
    from information_schema.constraint_column_usage a, information_schema.key_column_usage b
    where a.constraint_name = b.constraint_name
    and b.table_name = '<nom_table>'
    and a.constraint_name LIKE '%fk%'
    Merci pour les 2 minutes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Asscociation d'une foreign key avec une autre table
    Par ROUGE87 dans le forum Général Java
    Réponses: 7
    Dernier message: 13/04/2011, 10h36
  2. [SQL] Récupérer la table cible d'une foreign key
    Par thecrashteam dans le forum Développement
    Réponses: 4
    Dernier message: 26/05/2010, 15h17
  3. [SQL] Récupérer la table cible d'une foreign key
    Par thecrashteam dans le forum SQL
    Réponses: 4
    Dernier message: 26/05/2010, 11h35
  4. listes les champs + table d'une FOREIGN KEY
    Par richard038 dans le forum SQL
    Réponses: 3
    Dernier message: 25/08/2007, 11h20
  5. [débutant] Aide pour mettre une FOREIGN KEY sur une table
    Par cauldron dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/11/2004, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo