Zgaduję, że odpowiedź brzmi „nie” na podstawie poniższego komunikatu o błędzie (i tego wyniku Google ), ale czy istnieje możliwość wykonania zapytania między bazami danych przy użyciu PostgreSQL?
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented:
"databaseB.public.someTableName"
Pracuję z niektórymi danymi, które są podzielone na dwie bazy danych, chociaż dane są naprawdę współdzielone między nimi (kolumny identyfikatorów użytkowników w jednej bazie danych pochodzą z users
tabeli w drugiej bazie danych). Nie mam pojęcia, dlaczego są to dwie oddzielne bazy danych zamiast schematu, ale c'est la vie ...
źródło
postgresql-contrib
wcześniejdblink
? Lubpostgresql-contrib
zawieradblink
? I wtedy zapytanie OP będzie działało, czy musisz zapytać o to inaczej?dblink () - wykonuje zapytanie w zdalnej bazie danych
jeden z dobrych przykładów:
Uwaga: podaję te informacje do wykorzystania w przyszłości. Odniesienie
źródło
Wpadłem na to, zanim doszedłem do tego samego wniosku o zapytaniach między bazami danych, co ty. Skończyło się na tym, że użyłem schematów do podzielenia obszaru tabel w ten sposób, że mogłem pogrupować tabele, ale nadal sprawdzałem je wszystkie.
źródło
Żeby dodać trochę więcej informacji.
Często zadawane pytania dotyczące PostgreSQL
źródło
Tak, możesz użyć DBlink (tylko postgresql) i DBI-Link (zezwala na zagraniczne zapytania między bazami danych) i TDS_LInk, który umożliwia uruchamianie zapytań na serwerze MS SQL.
Korzystałem już wcześniej z DB-Link i TDS-link z wielkim sukcesem.
źródło
Jeśli wydajność jest ważna, a większość zapytań jest tylko do odczytu, sugerowałbym replikację danych do innej bazy danych. Chociaż wydaje się to niepotrzebnym powielaniem danych, może pomóc, jeśli wymagane są indeksy.
Można to zrobić za pomocą prostych wyzwalaczy wstawiania, które z kolei wywołują dblink, aby zaktualizować inną kopię. Istnieją również pełne opcje replikacji (jak Slony), ale to nie na temat.
źródło
Jeśli ktoś potrzebuje bardziej zaangażowanego przykładu wykonywania zapytań między bazami danych, oto przykład, który czyści
databasechangeloglock
tabelę w każdej bazie danych, która ją posiada:źródło
Sprawdziłem i próbowałem utworzyć relacje klucza obcego między 2 tabelami w 2 różnych bazach danych, używając zarówno dblink, jak i postgres_fdw, ale bez rezultatu.
Po przeczytaniu opinii innych ludzi na ten temat, na przykład tutaj i tutaj oraz w niektórych innych źródłach, wygląda na to, że obecnie nie można tego zrobić:
Dblink i postgres_fdw rzeczywiście umożliwić jednego do łączenia się i zapytania stoliki w innych bazach danych, co nie jest możliwe przy użyciu standardowych PostgreSQL, ale nie pozwalają na ustalenie kluczowych zagranicznych relacji między tabelami w różnych bazach danych.
źródło