Je vais deviner que la réponse est «non» en fonction du message d'erreur ci-dessous (et de ce résultat Google ), mais y a-t-il de toute façon pour effectuer une requête entre bases de données en utilisant PostgreSQL?
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented:
"databaseB.public.someTableName"
Je travaille avec des données partitionnées sur deux bases de données bien que les données soient vraiment partagées entre les deux (les colonnes userid dans une base de données proviennent de la users
table de l'autre base de données). Je n'ai aucune idée pourquoi ce sont deux bases de données distinctes au lieu d'un schéma, mais c'est la vie ...
la source
postgresql-contrib
avantdblink
? Oupostgresql-contrib
comprenddblink
? Et puis la requête de l'OP fonctionnera, ou devez-vous l'interroger différemment?dblink () - exécute une requête dans une base de données distante
l'un des bons exemples:
Remarque: je donne ces informations pour référence future. Réfrence
la source
J'ai rencontré cela avant d'arriver à la même conclusion sur les requêtes croisées de bases de données que vous. Ce que j'ai fini par faire, c'était d'utiliser des schémas pour diviser l'espace table de cette façon, je pouvais garder les tables groupées tout en les interrogeant toutes.
la source
Juste pour ajouter un peu plus d'informations.
FAQ PostgreSQL
la source
Oui, vous pouvez en utilisant DBlink (postgresql uniquement) et DBI-Link (autorise les requêtes de bases de données croisées étrangères) et TDS_LInk qui permet d'exécuter des requêtes sur le serveur MS SQL.
J'ai déjà utilisé DB-Link et TDS-link avec beaucoup de succès.
la source
Si les performances sont importantes et que la plupart des requêtes sont en lecture seule, je suggère de répliquer les données vers une autre base de données. Bien que cela semble être une duplication inutile des données, cela peut aider si des index sont nécessaires.
Cela peut être fait avec de simples déclencheurs d'insertion qui à leur tour appellent dblink pour mettre à jour une autre copie. Il existe également des options de réplication à part entière (comme Slony), mais c'est hors sujet.
la source
Si quelqu'un a besoin d'un exemple plus complexe sur la façon de faire des requêtes entre bases de données, voici un exemple qui nettoie la
databasechangeloglock
table sur chaque base de données qui la contient:la source
J'ai vérifié et essayé de créer une relation de clé étrangère entre 2 tables dans 2 bases de données différentes en utilisant à la fois dblink et postgres_fdw mais sans résultat.
Après avoir lu les commentaires des autres personnes à ce sujet, par exemple ici et ici et dans d'autres sources, il semble qu'il n'y ait aucun moyen de le faire actuellement:
Les dblink et postgres_fdw permettent en effet de se connecter et d'interroger des tables dans d'autres bases de données, ce qui n'est pas possible avec le standard Postgres, mais ils ne permettent pas d'établir des relations de clé étrangère entre des tables dans différentes bases de données.
la source