Acho que a resposta é "não" com base na mensagem de erro abaixo (e neste resultado do Google ), mas existe uma maneira de executar uma consulta entre bancos de dados usando o PostgreSQL?
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented:
"databaseB.public.someTableName"
Estou trabalhando com alguns dados particionados em dois bancos de dados, embora os dados sejam realmente compartilhados entre os dois (as colunas userid em um banco de dados vêm da users
tabela no outro banco de dados). Eu não tenho idéia por que esses são dois bancos de dados separados em vez de esquema, mas c'est la vie ...
fonte
postgresql-contrib
antesdblink
? Oupostgresql-contrib
incluidblink
? E a consulta do OP funcionará, ou você precisa consultá-la de maneira diferente?dblink () - executa uma consulta em um banco de dados remoto
um dos bons exemplos:
Nota: Estou fornecendo essas informações para referência futura. Refrence
fonte
Fiz isso antes de chegar à mesma conclusão sobre consultas entre bancos de dados que você. O que acabei fazendo foi usar esquemas para dividir o espaço da tabela para que eu pudesse manter as tabelas agrupadas, mas ainda consultar todas elas.
fonte
Apenas para adicionar um pouco mais de informação.
FAQ do PostgreSQL
fonte
Sim, você pode usar o DBlink (somente postgresql) e o DBI-Link (permite consultores de bancos de dados cruzados estrangeiros) e o TDS_LInk, que permite que as consultas sejam executadas no servidor MS SQL.
Eu usei DB-Link e TDS-link antes com grande sucesso.
fonte
Se o desempenho for importante e a maioria das consultas for somente leitura, sugiro replicar os dados para outro banco de dados. Embora isso pareça duplicação desnecessária de dados, pode ser útil se índices forem necessários.
Isso pode ser feito com gatilhos simples de inserção que, por sua vez, chamam dblink para atualizar outra cópia. Também existem opções de replicação completas (como o Slony), mas isso é fora de tópico.
fonte
Caso alguém precise de um exemplo mais envolvido sobre como fazer consultas entre bancos de dados, aqui está um exemplo que limpa a
databasechangeloglock
tabela em todos os bancos de dados que possuem:fonte
Eu verifiquei e tentei criar um relacionamento de chave estrangeira entre 2 tabelas em 2 bancos de dados diferentes usando dblink e postgres_fdw, mas sem resultado.
Depois de ler o feedback das outras pessoas sobre isso, por exemplo, aqui e aqui e em algumas outras fontes, parece que não há como fazer isso atualmente:
O dblink e o postgres_fdw realmente permitem conectar e consultar tabelas em outros bancos de dados, o que não é possível com o Postgres padrão, mas eles não permitem estabelecer relacionamentos de chave estrangeira entre tabelas em diferentes bancos de dados.
fonte