Voy a adivinar que la respuesta es "no" según el mensaje de error a continuación (y este resultado de Google ), pero ¿hay alguna forma de realizar una consulta entre bases de datos usando PostgreSQL?
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented:
"databaseB.public.someTableName"
Estoy trabajando con algunos datos que se dividen en dos bases de datos, aunque los datos se comparten realmente entre los dos (las columnas de ID de usuario en una base de datos provienen de la users
tabla en la otra base de datos). No tengo idea de por qué estas son dos bases de datos separadas en lugar de un esquema, pero c'est la vie ...
fuente
postgresql-contrib
antesdblink
? Opostgresql-contrib
incluyedblink
? Y entonces la consulta del OP funcionará, ¿o tiene que consultarla de manera diferente?dblink () : ejecuta una consulta en una base de datos remota
Uno de los buenos ejemplos:
Nota: estoy dando esta información para referencia futura. Referencia
fuente
Me he encontrado con esto antes de llegar a la misma conclusión sobre las consultas de bases de datos cruzadas que usted. Lo que terminé haciendo fue usar esquemas para dividir el espacio de la tabla de esa manera, podría mantener las tablas agrupadas pero aún consultarlas todas.
fuente
Solo para agregar un poco más de información.
Preguntas frecuentes de PostgreSQL
fuente
Sí, puede hacerlo utilizando DBlink (solo postgresql) y DBI-Link (permite los queriers de bases de datos cruzadas externas) y TDS_LInk, que permite ejecutar consultas en el servidor MS SQL.
He usado DB-Link y TDS-link antes con gran éxito.
fuente
Si el rendimiento es importante y la mayoría de las consultas son de solo lectura, sugeriría replicar los datos en otra base de datos. Si bien esto parece una duplicación innecesaria de datos, podría ayudar si se requieren índices.
Esto se puede hacer con simples activadores de inserción que a su vez llaman a dblink para actualizar otra copia. También hay opciones de replicación completas (como Slony), pero eso está fuera de tema.
fuente
En caso de que alguien necesite un ejemplo más complicado sobre cómo hacer consultas entre bases de datos, aquí hay un ejemplo que limpia la
databasechangeloglock
tabla en cada base de datos que lo tiene:fuente
He comprobado e intentado crear una relación de clave externa entre 2 tablas en 2 bases de datos diferentes usando dblink y postgres_fdw pero sin resultado.
Después de leer los comentarios de otras personas sobre esto, por ejemplo aquí y aquí y en algunas otras fuentes, parece que no hay forma de hacerlo actualmente:
De hecho, dblink y postgres_fdw permiten conectarse y consultar tablas en otras bases de datos, lo que no es posible con el Postgres estándar, pero no permiten establecer relaciones de clave externa entre tablas en diferentes bases de datos.
fuente