Я собираюсь догадаться, что ответ «нет» на основании приведенного ниже сообщения об ошибке (и это результат Google ), но есть ли способ выполнить кросс-запрос базы данных с использованием PostgreSQL?
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented:
"databaseB.public.someTableName"
Я работаю с некоторыми данными, которые распределены по двум базам данных, хотя данные действительно распределяются между ними (столбцы идентификаторов пользователей в одной базе данных берутся из users
таблицы в другой базе данных). Я понятия не имею, почему это две отдельные базы данных, а не схема, но c'est la vie ...
источник
postgresql-contrib
раньшеdblink
? Илиpostgresql-contrib
включаетdblink
? И тогда запрос OP будет работать, или вам нужно запросить его по-другому?dblink () - выполняет запрос в удаленной базе данных
один из хороших примеров:
Примечание: я даю эту информацию для дальнейшего использования. Refrence
источник
Я столкнулся с этим до того, как пришел к тому же выводу о кросс-запросах к базе данных, что и вы. В итоге я использовал схемы для разделения табличного пространства таким образом, чтобы я мог сохранять таблицы сгруппированными, но при этом запрашивать их все.
источник
Просто чтобы добавить немного больше информации.
PostgreSQL FAQ
источник
Да, вы можете использовать DBlink (только postgresql) и DBI-Link (разрешает внешние кросс-запросы к базам данных) и TDS_LInk, который позволяет выполнять запросы к серверу MS SQL.
Я использовал DB-Link и TDS-link раньше с большим успехом.
источник
Если важна производительность и большинство запросов доступны только для чтения, я бы предложил реплицировать данные в другую базу данных. Хотя это кажется ненужным дублированием данных, это может помочь, если требуются индексы.
Это можно сделать с помощью простых триггеров вставки, которые в свою очередь вызывают dblink для обновления другой копии. Есть также полнофункциональные варианты репликации (например, Slony), но это не по теме.
источник
В случае, если кому-то нужен более сложный пример выполнения запросов между базами данных, вот пример, который очищает
databasechangeloglock
таблицу в каждой базе данных, в которой он есть:источник
Я проверил и попытался создать отношения внешнего ключа между 2 таблицами в 2 разных базах данных, используя dblink и postgres_fdw, но безрезультатно .
Прочитав отзывы других людей по этому поводу, например, здесь и здесь, и в некоторых других источниках, похоже, что в настоящее время нет способа сделать это:
DBLink и postgres_fdw действительно позволяют подключиться к и запросам к таблицам других баз данных, что невозможно со стандартным Postgres, но они не позволяют установить внешние отношения ключевых между таблицами в различных базах данных.
источник