natural - right join postgresql
Unir resultados de dos bases de datos separadas (7)
De acuerdo con http://wiki.postgresql.org/wiki/FAQ
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.
EDITAR : 3 años después (marzo de 2014), esta entrada de preguntas frecuentes ha sido revisada y es más útil:
¿Cómo realizo consultas usando múltiples bases de datos?
No hay forma de consultar directamente 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.
El soporte SQL / MED en PostgreSQL permite crear un "contenedor de datos externo", vinculando tablas en una base de datos remota a la base de datos local. La base de datos remota puede ser otra base de datos en la misma instancia de PostgreSQL, o una base de datos a la mitad del mundo, no importa. postgres_fdw está incorporado en PostgreSQL 9.3 e incluye soporte de lectura / escritura; una versión de solo lectura para 9.2 se puede compilar e instalar como un módulo contrib.
contrib / dblink permite consultas entre bases de datos utilizando llamadas a funciones y está disponible para versiones de PostgreSQL mucho más antiguas. A diferencia de postgres_fdw, no puede "empujar hacia abajo" las condiciones al servidor remoto, por lo que a menudo terminará obteniendo muchos más datos de los que necesita.
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.
¿Es posible JOIN
filas de dos bases de datos separadas de postgres?
Estoy trabajando con el sistema con dos bases de datos en un servidor y, a veces, realmente necesito esa característica.
Necesita usar dblink ... como araqnid mencionado anteriormente, algo así funciona bien:
seleccione ST.Table_Name, ST.Column_Name, DV.Table_Name, DV.Column_Name, * from information_schema.Columns ST full outer join dblink (''dbname = otherdatabase'', ''select Table_Name, Column_Name from information_schema.Columns'') DV (Table_Name text, Column_Name text) en ST.Table_Name = DV.Table_name y ST.Column_Name = DV.Column_Name donde ST.Column_Name es nulo o DV.Column_Name es NULL
No, no puedes. Puede usar dblink para conectarse de una base de datos a otra, pero eso no ayudará si está buscando JOIN.
No puede usar diferentes SCHEMA dentro de una única base de datos para almacenar todos sus datos?
Olvídate de dblink!
Saluda a Postgres_FDW :
Para prepararse para el acceso remoto usando
postgres_fdw
:
Instala la extensión
postgres_fdw
usandoCREATE EXTENSION
.Cree un objeto de servidor externo, utilizando
CREATE SERVER
, para representar cada base de datos remota a la que desea conectarse. Especifique la información de conexión, excepto el usuario y la contraseña, como opciones del objeto del servidor.Cree una asignación de usuario, utilizando
CREATE USER MAPPING
, para cada usuario de la base de datos que desee permitir el acceso a cada servidor extranjero. Especifique el nombre de usuario y la contraseña remotos para usar como opciones de usuario y contraseña de la asignación del usuario.Cree una tabla foránea, utilizando
CREATE FOREIGN TABLE
oIMPORT FOREIGN SCHEMA
, para cada tabla remota a la que desee acceder. Las columnas de la tabla externa deben coincidir con la tabla remota a la que se hace referencia. Sin embargo, puede utilizar nombres de tablas y / o columnas diferentes a los de la tabla remota, si especifica los nombres remotos correctos como opciones del objeto de tabla foránea.Ahora solo necesita
SELECT
de una tabla foránea para acceder a los datos almacenados en su tabla remota subyacente.
Es realmente útil incluso en datos de gran tamaño.
Sí, es posible hacer esto usando dblink
aunque con considerables consideraciones de rendimiento.
El siguiente ejemplo requerirá que el usuario SQL actual tenga permisos en ambas bases de datos. Si db2
no está ubicado en el mismo clúster, necesitará reemplazar dbname=db2
con la cadena de conexión completa definida en la documentación de dblink .
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;
Si la table2
es muy grande, puede tener problemas de rendimiento porque la sub consulta carga toda la table2
antes de realizar la unión.
Solo unos pocos pasos y puede alcanzar el objetivo: siga esta referencia paso a paso
WE HAVE BEEN CONNECTED TO DB2 WITH TABLE TBL2 AND COLUMN COL2
ALSO THERE IS DB1 WITH TBL1 AND COLUMN COL1
*** connecting to second db ie db2
Now just **copy paste the 1-7 processes** (make sure u use correct username and password and ofcourse db name)
1.**CREATE EXTENSION dblink;**
2.**SELECT pg_namespace.nspname, pg_proc.proname
FROM pg_proc, pg_namespace
WHERE pg_proc.pronamespace=pg_namespace.oid
AND pg_proc.proname LIKE ''%dblink%'';**
3.**SELECT dblink_connect(''host=localhost user=postgres password=postgres dbname=db1'');**
4.**CREATE FOREIGN DATA WRAPPER postgres VALIDATOR postgresql_fdw_validator;**
5.**CREATE SERVER postgres2 FOREIGN DATA WRAPPER postgres OPTIONS (hostaddr ''127.0.0.1'', dbname ''db1'');**
6.**CREATE USER MAPPING FOR postgres SERVER postgres2 OPTIONS (user ''postgres'', password ''postgres'');**
7.**SELECT dblink_connect(''postgres2'');**
---Now, you can SELECT the data of Database_One from Database_Two and even join both db results:
**SELECT * FROM public.dblink
(''postgres2'',''SELECT col1,um_name FROM public.tbl1 '')
AS DATA(um_userid INTEGER),tbl2 where DATA.col1=tbl2.col2;**
You can also Check this :[How to join two tables of different databases together in postgresql [/[working finely in version 9.4/]][1]
Tienes la extensión dblink de postgresql.
Toma de referencia de este artículo:
Extensión DbLink de PostgreSQL que se utiliza para conectar una base de datos a otra base de datos.
Instale la extensión DbLink.
CREATE EXTENSION dblink;
Verificar DbLink:
SELECT pg_namespace.nspname, pg_proc.proname
FROM pg_proc, pg_namespace
WHERE pg_proc.pronamespace=pg_namespace.oid
AND pg_proc.proname LIKE ''%dblink%'';
Ya he preparado una demostración completa sobre esto. Visite mi publicación para aprender paso a paso la ejecución de consultas de bases de datos cruzadas en Postgresql.