SafeChildren Banner

Havoc Oracle Solaris Experts

viernes, 20 de enero de 2012

DBLink con parametros en PostgreSQL

Introducción
Hace unos días una persona me dejó una duda a modo de comentario en la entrada de DBLinks en PostgreSQL. Esta duda es sencilla, y, a la vez interesante, por eso, he decidido crear una entrada explicando la solución.

La duda
¿Es posible crear una vista en PostgreSQL utilizando un DBLink con parámetros dinámicamente?

Es decir, lo que queremos es hacer los siguiente:
SELECT device_name FROM remote_database_v(param1, param2);
La solución
Sobre si es posible crear una Vista con un DBLink parametrizado, lo cierto es que no se puede, es decir, no podemos crear una vista pasando un argumento.

Sin embargo, podemos crear un procedimiento que nos devuelva un tipo "record" y pasarle como parámetros la cadena de conexión, por ejemplo:
CREATE OR REPLACE FUNCTION test_dblink_with_parameter(dbname character varying, dbhost character varying, dbuser character varying, dbuserpass character varying)
  RETURNS SETOF record AS
$BODY$
    SELECT t.device_name
    FROM dblink('dbname=' || $1 || '  port=5432 host=' || $2 || ' user=' || $3 ||' password=' || $4 , 'SELECT device_name FROM devices.as_device') as
     t(device_name character varying);
$BODY$
  LANGUAGE sql VOLATILE;
Y ahora podemos llamar a nuestro procedimiento como si fuese una tabla o vista.

Recordar que al ser de tipo "record" tenemos que decirle cómo es el formato del registro <AS (field1 type, field2 type, fieldn type)>, en nuestor caso devuelve el campo "as_device" que es de type "character varying".
SELECT * FROM test_dblink_with_parameter('dbname','localhost','user','password') AS (device_name character varying);
Algunas Mejoras
En función de los datos que estamos obteniendo, podemos, por ejemplo, optimizar el coste <COST> y el número de rows <ROWS> del procedimiento. En el ejemplo, hemos dejado el coste y el número de rows "por defecto",  COST 100ROWS 100.

Referencias


lunes, 2 de enero de 2012

Feliz 2012

Hemos pasado un año más, y como siempre, toca hacer un repaso a los 365 días que han transcurrido con sus buenos y malos momentos.

Puedo decir que para mi el 2011 ha sido uno de los años más gratificantes -tanto personal como profesionalmente- y, espero que el 2012 sea aún mejor.

Comencé una nueva aventura en Havoc Technologies como responsable del área de I+D e IT, todo un desafío, pero, ya estamos en la rampa de salida con los productos de Navegación Segura para Niños y Sistemas de Control de Navegación para empresas.

Todo ello basado en Solaris, PostgreSQL y Hadoop. Tecnologías que me encantan, y, aunque los comienzos no fueron fáciles, ya estamos a pleno rendimiento!

Por ello, me gustaría desear a todos los SysAdmins un Feliz 2012


Un Saludo,
Urko