funciones exportar datos crear consultas complejas comandos anidadas sql postgresql

crear - exportar base de datos postgresql pgadmin 4



Posibilidad de realizar consultas entre bases de datos con postgres? (6)

dblink() - ejecuta una consulta en una base de datos remota

dblink ejecuta una consulta (normalmente un SELECT, pero puede ser cualquier instrucción SQL que devuelve filas) en una base de datos remota.

Cuando se dan dos argumentos de texto, el primero se busca como el nombre de una conexión persistente; si se encuentra, el comando se ejecuta en esa conexión. Si no se encuentra, el primer argumento se trata como una cadena de información de conexión como para dblink_connect, y la conexión indicada se realiza solo mientras dure este comando.

uno de los buenos ejemplos:

SELECT * FROM table1 tb1 LEFT JOIN ( SELECT * FROM dblink(''dbname=db2'',''SELECT id, code FROM table2'') AS tb2(id int, code text); ) AS tb2 ON tb2.column = tb1.column;

Nota: estoy dando esta información para futuras referencias. Refrence

Voy a adivinar que la respuesta no se basa en el siguiente mensaje de error (y este resultado de Google ), pero ¿hay alguna forma de realizar una consulta entre bases de datos utilizando Postgres?

databaseA=# select * from databaseB.public.someTableName; ERROR: cross-database references are not implemented: "databaseB.public.someTableName"

Estoy trabajando con algunos datos que están divididos en dos bases de datos aunque los datos realmente se comparten entre los dos (las columnas de ID de usuario en una base de datos provienen de la tabla de users 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 ...


Me he encontrado con esto antes de llegar a la misma conclusión sobre las consultas cruzadas de bases de datos que tú. Lo que terminé haciendo fue usar esquemas para dividir el espacio de la mesa de esa manera, pude mantener las tablas agrupadas pero aun así consultarlas todas.


Sí, puede usar DBlink (postgresql solamente) y DBI-Link (permite consultas de bases de datos cruzadas extranjeras) y TDS_LInk, lo que permite que las consultas se ejecuten contra el servidor MS SQL.

He usado DB-Link y TDS-link anteriormente con gran éxito.


Si el rendimiento es importante y la mayoría de las consultas son de solo lectura, sugiero que se repliquen los datos en otra base de datos. Si bien esto parece una duplicación innecesaria de datos, podría ser útil 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 en toda regla (como Slony), pero eso está fuera de tema.


Nota: Como implica el asker original, si está configurando dos bases de datos en la misma máquina, es probable que desee crear dos schemas lugar; en ese caso, no necesita nada especial para consultar entre ellos.

Actualización a partir de 9.3

Ahora puede usar el nuevo postgres_fdw (contenedor de datos externo) para conectarse a tablas en cualquier base de datos de Postgres: local o remota.

Tenga en cuenta que existen contenedores de datos externos para otras fuentes de datos populares . En este momento, solo postgres_fdw y file_fdw son parte de la distribución oficial de Postgres.

Respuesta original para pre-9.3

Esta funcionalidad no es parte de la instalación predeterminada de PostgreSQL, pero puede agregarla. Se llama dblink .

Nunca lo he usado, pero se mantiene y se distribuye con el resto de PostgreSQL. Si está utilizando la versión de PostgreSQL que viene con su distribución de Linux, es posible que necesite instalar un paquete llamado postgresql-contrib.


Solo para agregar un poco más de información.

No hay forma de consultar una base de datos que no sea la actual. Debido a que PostgreSQL carga catálogos de sistemas específicos de la base de datos, no está claro cómo se comportaría una consulta entre bases de datos.

contrib / dblink permite consultas entre bases de datos utilizando llamadas a funciones. Por supuesto, un cliente también puede hacer conexiones simultáneas a diferentes bases de datos y fusionar los resultados en el lado del cliente.

Preguntas frecuentes sobre PostgreSQL