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

PostgreSQL Discussion :

Jointure entre tables distantes (serveurs distants) [9.3]


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 64
    Points
    64
    Par défaut Jointure entre tables distantes (serveurs distants)
    Bonjour,

    Je cherche à réaliser des jointures entre des tables qui se trouvent sur des serveurs postgres 9.3 distants.

    Pour ce faire j'ai exploré les méthodes proposées pour permettre l'accès entre bases de données :
    - dblink : finalement pas testé car la deuxième solution semblait désormais conseillée.
    - postgres_fdw : solution testée

    J'ai ainsi appliqué les requêtes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE EXTENSION postgres_fdw; 
    
    CREATE SERVER foreign_server_srvdata
        FOREIGN DATA WRAPPER postgres_fdw
        OPTIONS (host 'ip du serveur', port '5432', dbname 'nom de ma base distante');
    
    CREATE USER MAPPING FOR postgres
            SERVER foreign_server_srvdata
            OPTIONS (user 'postgres', password 'mon mot de passe');
    Jusque là tout a fonctionné.

    Là où je coince s'est, ensuite, dans la façon de constituer la requête de sélection par exemple.

    Si je fais, par exemple, un select tout simple :

    SELECT *
    FROM MaBasDistante.MonSchema.MaTable

    J'ai le message suivant :

    ERREUR: les références entre bases de données ne sont pas implémentées

    Je suppose qu'il doit falloir déclarer de façon bien spécifique les tables distantes dans le cadre d'une requête mixant des tables locales avec des tables distantes... mais je ne sais comment faire ?

    J'ai eu beau fouiller sur différents forums, je n'ai trouvé aucun de exemple de requête de ce type.

    Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Il manque une étape à l'utilisation des tables distantes, à savoir la création de tables "locales" (CREATE FOREIGN TABLE...) qui pointent sur les tables "distantes". voir ici.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    Bonjour et merci pour le retour alassanediakite,

    Les congés de fin d'année sont passés par là et je ne découvre les réponses que maintenant.
    En tous cas, mea-culpa, j'ai effectivement sauté l'étape "CREATE FOREIGN TABLE"...

    Je viens donc de l'appliquer mais le résultat final n'est pas concluant, je m'explique :

    J'applique un "CREATE FOREIGN TABLE" en m'appuyant sur l'exemple donné dans la documentation, ce qui me retourne que la requête a été exécutée avec succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE FOREIGN TABLE cad_2015.vue_communes_riomco (
      code_territoire text,
      lib_territoire text)
    SERVER foreign_server_srvdata;
    Le schema cad_2015 est celui dans lequel je veux venir coller ma "table distante" dénommée vue_communes_riomco. Pour tester je lui ai donné le même nom que la table sur laquelle je veux pointer et qui se trouve sur le serveur distant que j'ai créé et nommé précédemment foreign_server_srvdata.

    Par contre, et même si la création m'a été indiquée comme réussie, je ne vois pas ma nouvelle table dans mon schema cad_2015 et un select me renvoi effectivement ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM cad_2015.vue_communes_riomco
    ERREUR: la relation « cad_2015.vue_communes_riomco » n'existe pas
    État SQL :42P01
    Contexte : Remote SQL command: SELECT code_territoire, lib_territoire FROM cad_2015.vue_communes_riomco
    Il y a forcément quelque chose que je ne fais pas correctement mais je ne sais pas quoi...

    Je ne comprends pas, non plus, que l'on ne déclare pas précisément la table sur laquelle on veut pointer sur le serveur distant : mon_schema.ma_table.

    Merci d'avance pour votre aide.

  4. #4
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Au vu de ...
    ERREUR: la relation « cad_2015.vue_communes_riomco » n'existe pas
    État SQL :42P01
    Contexte : Remote SQL command: SELECT code_territoire, lib_territoire FROM cad_2015.vue_communes_riomco
    Je dirais que la table n'existe pas sur le serveur distants.
    Dans la creation de FOREIGN table il faut preciser le chemat et la table sur le serveur distant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE FOREIGN TABLE cad_2015.vue_communes_riomco (
      code_territoire text,
      lib_territoire text)
    SERVER foreign_server_srvdata OPTION (schema_name '...', table_name '...');
    Par ailleurs, si vous travailler avec PgAdmin, il faut lui demander d'afficher les tables distantes: Fichier->Preferences->Navigateur(affichage)->Tables distantes
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  5. #5
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Tout marche parfaitement maintenant je remets juste la requête car il manquait un "s" à OPTION, elle est désormais fonctionnelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE FOREIGN TABLE cad_2015.vue_communes_riomco (
      code_territoire text,
      lib_territoire text)
    SERVER foreign_server_srvdata OPTIONS (schema_name '...', table_name '...');
    J'ai aussi modifié les préférences de pgAdmin en ajoutant les "Tables distantes" ainsi que les "Wrappers de données distantes" qui permet également de voir les différents serveurs distants que l'on a pu paramétrer.

    Merci beaucoup pour ces très bon conseils alassanediakite !!!

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

Discussions similaires

  1. Jointure entre tables sur des serveurs différents
    Par sayfouche dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/03/2012, 17h23
  2. jointure entre tables de bases différentes
    Par mcdelay dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/04/2007, 12h56
  3. Maximum authorisé de jointure entre tables
    Par Arkane dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/12/2006, 17h49
  4. Réponses: 2
    Dernier message: 10/10/2006, 18h59
  5. [Sybase] Accès Table sur serveur distant
    Par MashiMaro dans le forum Sybase
    Réponses: 5
    Dernier message: 11/02/2004, 14h09

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