Hacer un SELECT entre dos base de datos en un mismo servidor – postgresql

publicado por: Anonymous

Buenas noches Titanes de la programación tengo un problema, estoy intentando hacer un select entre dos base de datos distintas que están en el mismo servidor, esta es la consulta que hago :

SELECT A.nodo, 
       B.nodo
FROM   camper.public.camper1 A 
       INNER JOIN camper_tmp.public.campi2c B 
               ON A.nodo= B.nodo

y este es el resultado:

Error de SQL:

ERROR: cross-database references are not implemented:
“camper_tmp.public.campi2c” LINE 4: INNER JOIN
camper_tmp.public.campi2c B

Que estoy haciendo mal, o como puedo hacer ese select entre dos base de datos diferentes en postgres , gracias de antemano.

solución

Para hacer una consulta entre 2 o más bases de datos en postgresql debes usar dblink, suponiendo que tienes 2 bases de datos; test1 y test2 que contienen las tablas tabla1 y tabla2 respectivamente sigue los siguientes pasos:

1. Asegurate de que exista el archivo dblink.sql donde instalaste el PostgreSQL, por ejemplo:

C:Program Files (x86)PostgreSQL9.3shareextension

De no existir puedes descargarla o instalarla, existen muchos enlaces que indican como hacerlo dependiendo el sistema operativo y la versión.

2. Debes tener el nombre de la base de datos, el nombre de usuario y la contraseña para poder acceder, por ejemplo:

Base de datos: tabla2
usuario: postgres
password: 123456

3. Suponiendo que te encuentras en la base de datos test1, coloca la siguiente linea:

create extension dblink;

4. Por ultimo realiza la consulta de la siguiente forma:

select T1.campo1, T1.campo2..., T2.campo1, T2.campo2, ... 
from tabla1 T1, dblink('dbname=test2 user=postgres password=123456', 'select * from tabla2') as T2 (campo1 tipo1, campo2 tipo2, ...)
where condiciones

Ademas de los datos de la bd, en campo1, campo2, etc debes colocar el alias que tendrán los campos, y en tipo1, tipo2, etc, debes colocar el tipo (int, varchar, etc.)

Espero te sea de ayuda. Saludos.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *