PDA

Ver la Versión Completa : Insertar en 2 Bases distintas en la misma operación


ToritoCapo
24-02-2011, 18:23:27
Hola a todos !!!! Esta es mi primera consulta.
Le paso los parametros a un procedimiento almacenado de postgres, para que inserte datos en varias tablas de la Base1.
Queria saber como puedo hacer para insertar un par de datos también en una tabla de la Base2 que está en el mismo postgres.

Puedo acceder a una base o a la otra, cerrando la conexión de una y volver a conectarme con la otra, pero de esta manera es MUY engorroso porque hay veces que hay que cambiar para un lado y el otro en la misma operación muchisimas veces, por eso queria que me ayuden a hacerlo con la misma conexión directamente desde postgres.

Saludos!!!

rgstuamigo
24-02-2011, 18:58:41
Bueno... suponiendo que tu primera base de datos se llame "MyBD1" y tu segunda base de datos "MyBD2" entonce se puede acceder a las tablas de cualquier BD de la siguiente forma:

Insert into MyBD1.MyTable values (..,..,...etc);

Insert Into MyBD2.OtraTabla values(..,..,...etc);
Es decir estando trabajando en una base de dato específica, puedo acceder a otra BD con tan solo anteponiendo el nombre de la BD antes del nombre de la tabla;)
Ésto al menos así fucniona en MySQL, supongo que en PostGreSQL tambien debe funcionar así, ya que segun tengo entendido es un Monstruo.:eek::D
Y ésto sin estar cerrando y abriendo nueva conexion...;)
Pruebalo...;)
Saludos...:)

ToritoCapo
25-02-2011, 18:38:58
Gracias por tu ayuda!!!!

Intenté hacer lo que me dijiste, pero no funciona, me tira este mensaje: cross-database references are not implemented : "db1.public.tabla1"

En algún lugar lei que habia que utilizar algo llamado DBLINK o algo asi, pero sigo sin poder lograrlo.
Alguna otra idea o alguien que sepa como utilizar ese dblink ???

Gracias nuevamente.
Saludos.

rhino0nt
25-02-2011, 18:52:32
No sé que tan compleja necesites tu solución, sin embargo esto se puede abordar desde varios frentes:

1. Utilizar un servicio de interconexión como DBLink que no te lo recomiendo porque el costo de las transacciones es alto y no es muy confiable que digamos, al parecer tiende a caerse, yo en lo personal no lo he utilizado pero las personas que lo han hecho reportan malas experiencias. Si requieres mayor información puedes buscar en la lista de correo de PostgreSQL en español, seguro que alguien te ayuda.

2. Utilizar dos conexiones a las bases de datos. No se que controles utilices, yo he utilizado los controles de DevArt con PostgreSQL y son Excelentes, simplemente haces una conexión para cada base de datos y realizas la consulta sobre la que lo requieras hacer, no debiera ser complicado. Incluso en un sistema anterior que tenía que conectarse a varios servidores de una empresa vía su propio servicio de interconexión con anchos de banda muy miserables lo que hicimos fue generar una tabla con las conexiones donde el usuario en un combo simplemente seleccionaba la sucursal y nosotros tomábamos los datos de conexión de la tabla, modificábamos el control, abríamos la conexión, ejecutábamos y al final solo la cerrábamos, todo con PostgreSQL, muy eficiente.

Espero haberte ayudado.

Saludos.

ToritoCapo
01-03-2011, 18:07:14
Gracias por su invalorable aporte, amigos !!!!

Realicé una segunda conexión para la otra base de datos y se terminaron todos mis problemas.
Lo que antes hacia con una sola conexión, cerrando y conectando a una base y a otra ( a pesar de esto funcionaba rápido igual ) con una conexión para cada base, le puedo asegurar que ahora "vuela".

Es increible, como teniendo la solución siempre delante de mis ojos, nunca reparé en este detalle, por eso vuelvo a repetir la importancia de el aporte de todos ustedes.

Muchisimas gracias!!!!

Saludos.