Ich gehe davon aus, dass die Antwort aufgrund der folgenden Fehlermeldung (und dieses Google-Ergebnisses ) "Nein" lautet. Gibt es dennoch eine Möglichkeit, eine datenbankübergreifende Abfrage mit PostgreSQL durchzuführen?
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented:
"databaseB.public.someTableName"
Ich arbeite mit einigen Daten, die auf zwei Datenbanken aufgeteilt sind, obwohl die Daten tatsächlich zwischen den beiden geteilt werden (Benutzer-ID-Spalten in einer Datenbank stammen aus der users
Tabelle in der anderen Datenbank). Ich habe keine Ahnung, warum dies zwei separate Datenbanken anstelle von Schema sind, aber c'est la vie ...
quelle
postgresql-contrib
vorher installierendblink
? Oderpostgresql-contrib
beinhaltetdblink
? Und dann funktioniert die Abfrage des OP, oder müssen Sie sie anders abfragen?dblink () - führt eine Abfrage in einer entfernten Datenbank aus
eines der guten Beispiele:
Hinweis: Ich gebe diese Informationen zum späteren Nachschlagen. Erfrischung
quelle
Ich bin darauf gestoßen, bevor ich zu dem gleichen Schluss über datenbankübergreifende Abfragen gekommen bin wie Sie. Am Ende habe ich Schemata verwendet, um den Tabellenbereich so aufzuteilen, dass ich die Tabellen gruppieren und trotzdem alle abfragen konnte.
quelle
Nur um ein bisschen mehr Informationen hinzuzufügen.
PostgreSQL FAQ
quelle
Ja, Sie können DBlink (nur postgresql) und DBI-Link (ermöglicht datenbankübergreifende Fremdabfragen) sowie TDS_LInk verwenden, mit dem Abfragen für MS SQL Server ausgeführt werden können.
Ich habe DB-Link und TDS-Link bereits mit großem Erfolg verwendet.
quelle
Wenn die Leistung wichtig ist und die meisten Abfragen schreibgeschützt sind, würde ich empfehlen, Daten in eine andere Datenbank zu replizieren. Dies scheint zwar eine unnötige Duplizierung von Daten zu sein, kann jedoch hilfreich sein, wenn Indizes erforderlich sind.
Dies kann mit einfachen Triggern beim Einfügen erfolgen, die wiederum dblink aufrufen, um eine weitere Kopie zu aktualisieren. Es gibt auch vollständige Replikationsoptionen (wie Slony), aber das ist kein Thema.
quelle
Falls jemand ein beteiligtes Beispiel auf benötigt , wie Cross-Datenbank - Abfragen zu tun, hier ist ein Beispiel , das aufräumt der
databasechangeloglock
Tabelle auf jeder Datenbank , die es hat:quelle
Ich habe überprüft und versucht, eine Fremdschlüsselbeziehung zwischen 2 Tabellen in 2 verschiedenen Datenbanken mit dblink und postgres_fdw zu erstellen, aber ohne Ergebnis.
Nachdem ich das Feedback der anderen Leute dazu gelesen habe, zum Beispiel hier und hier und in einigen anderen Quellen, sieht es so aus, als gäbe es derzeit keine Möglichkeit, dies zu tun:
Mit dblink und postgres_fdw kann man zwar eine Verbindung zu Tabellen in anderen Datenbanken herstellen und diese abfragen, was mit den Standard-Postgres nicht möglich ist, aber es ist nicht möglich, Fremdschlüsselbeziehungen zwischen Tabellen in verschiedenen Datenbanken herzustellen.
quelle