lunes, 23 de agosto de 2010

PostgreSQL: DBlink, conexion entre bases de datos postgres

DBlink consta de un conjunto de funciones diseñadas para realizar conexiones entre bases de datos Postgres, en el mismo server o en otros.. lo que se necesita es instalar DBlink en el servidor que hace la peticion..
Para implementar esto debes instalar el paquete contrib de la version que usas de postres
# aptitude install postgresql-contrib-8.3
el contrib de postgres provee una serie de funciones muy utiles para desarrolladores y administradores.
Para instalar la funcion en tu BD debes ser el usuario postgres y por lineas de comando:
$ cd /usr/share/postgresql/8.3/contrib
$ psql test_db u_test -h localhost < dblink.sql
Te conectas a la BD que tiene instalado el DBlink y realizas la consulta
$ psql test_db u_test -h localhost
La idea es trear datos de la BD my_db que esta en el servidor 191.168.50.90 y mostrarlos en la conexion establecida en test_db en localhost
test_db=# select * from
dblink ('dbname=my_db hostaddr=191.168.50.90 user=u_test password=123456 port=5432',
'select id,descripcion from tabla')  as t1(id int4,descripcion text); 

Listo!

15 comentarios:

  1. Sr. Roiman su ejemplo con dblink no me funciona me arroja el siguiente error: ERROR: no existe la función dblink(unknown, unknown). Alguna sugerencia?

    ResponderEliminar
  2. si, estas seguro q lo instalaste? ese error es q no consigue la funcion definida.. si instalaste bien y estas usando algo similar al ejemplo el error seria uno muy diferente..

    ResponderEliminar
  3. buenas Roiman, estoy en la duda de conectarme y relizar un select en otra base de datos y ay algo que no entiendo por ser principiante, donde puedo descargar o que debo colocar el "contrib" y el "dblink.sql" de ante mano muchas gracias

    ResponderEliminar
  4. Buen aporte, voy a intentarlo con mis servidores postgresql

    ResponderEliminar
  5. Solo tuve que ejecutar el siguiente codigo SQL en Postgrsql 9.1:

    create extension dblink;

    ResponderEliminar
  6. Sip, asi es... gracias por el aporte! recuerda tambien que puedes ejecutar eso sobre template1 y todas tus proximas BD que se creen tendran precargadas esas funciones de dblink!

    ResponderEliminar
  7. Muchas gracias, me funcionó perfectamente.

    ResponderEliminar
  8. Que error podría tener cuando sale lo siguiente
    Error en dblink no se puede encontrar la relación "empleados"

    ResponderEliminar
    Respuestas
    1. umm. no consigue la tabla empleados. tendrias q enviar la consulta completa a ver si es q hay algun error.

      Eliminar
  9. Una consulta la sentencia
    create extension dblink;
    solo funciona para PostgreSQL 9.0 en adelante porq tengo la version 8.4.18 y no funciona.. :(.

    ResponderEliminar
    Respuestas
    1. Hola! sigue los pasos publicados en este post.. seguro te servira para versiones inferiores a la 9

      Eliminar
  10. hola,,,
    Quisiera saber si has podido lograr hacer correr la funcion DBllink en el pgadmin y se fue así que configuración hiciste,,,

    Por casualidad tendrás una clase en php para hacer un join con la data local y la remota,,,

    Saludos desde chile :D

    ResponderEliminar
  11. Gracias por el aporte Sr. Romain, le comparto que he realizado pruebas y funciona bien, pero tengo el siguiente problema: actualmente uso Potsgres 9.2 y he creado una función y dentro de PgAdminIII trabaja muy bien, pero cuando intento ejecutarla desde mi aplicación hecha en vb.net me salta el siguiente error: "(no existe la función dblink(unknown, unknown)", si tiene alguna luz que puediera ayudarme se lo agradecería mucho. Nota: he intentado manejarlo con un trigger que se dispara al insertar datos en una tabla y el resultado es el mismo.

    ResponderEliminar
  12. y en local de que manera se hace por que me muestra un error de "no están implementadas las referencias entre bases de datos"

    ResponderEliminar