DBlink conexion BBDD - Tensho97/Aprende-a-Aprender GitHub Wiki

Un dblink es una conexión que se establece entre dos bases de datos. El objetivo de esta conexión es la obtención de datos o consultas sobre una base ajena a la que estamos conectados.

Desde cualquier BD se pueden recuperar datos de cualquier otra base de datos (Naturalmente, es necesario identificarse con perfil de un usuario con acceso a los mismos). En el caso de PostgreSQL, DBLink son funciones preparadas por los autores de postgres que añaden la funcionalidad de acceso a datos de forma remota.

No se trata de conectarse remotamente con un servidor de bases de datos, sino acceder desde una base da datos a elementos de otra base de datos a través de una linea de comunicaciones, combinando ambas.


Instalar funciones DBlink en tu base de datos local:

  • Solo es necesario realizar esto UNA vez.
  • Se ejecuta el SQL que creará las funciones de dblink. El script está en:
    • C:\Program Files\PostgreSQL(version)\share\contrib\dblink.sql o bien ..\share\extension\dblink.sql
  • Una vez ejecutado el script, la base de datos esta preparada para conectarse a otras.

Ejemplos de comandos:


Select:

SELECT lista_de_campos
FROM dblink('dbname=baseDatos port=puerto host=ordenadorRemoto user=usuario password=contraseña','SQL') AS Alias(campo1 tipo1,campo2 tipo2,…)
WHERE condiciones
ORDER BY criterios_de_ordenacion;

Insert/update/delete:

Ser realiza con la funcion dblink_exec , que tiene el formato siguiente dblink_exec('conexion','sentenciaSQL').

select dblink_exec('dbname=remota port=5432 host=yoquese.com user=postgres password=contrasena',
'INSERT INTO gente (codigo,nombre,sueldo) VALUES (33,''Pepito'',1234.45));

A la hora de introducir varchar se deben poner dos ' seguidas para que funcione


Mezcla de datos remotos y locales:

Por supuesto se pueden realizar consultas mixtas que impliquen la base de datos local y la remota. Para ello se realizaran vario pasos:

  1. Se realiza la conexion con la Base de Datos:
SELECT dblink_connect('dbname=empleado port=5432 host=192.168.32.44 user=postgres password=root');
  1. Sentencia SQL:
SELECT r.nombre,a.texto
FROM     dblink('SELECT nuempl,nombre FROM templa') AS r(nuempl varchar,nombre varchar),
tabla_local AS a
WHERE r.nuempl=a.codigo;

La tabla r, se corresponde con la tabla temporal creada por bdlink para guardar los datos externos. Mientras que la tabla a es la tabla local.

  1. Se cierra la conexion:
SELECT dblink_disconnect();


Autor: Miguel