From: | Ernesto Quiñones <ernestoq(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: consulta basica |
Date: | 2009-11-12 17:55:20 |
Message-ID: | 2ba222580911120955h32d3ea0cx2a1479b1453c101d@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Aquí tengo yo un ejemplo de dbilink con Mysql, tendrías que
configurarlo para DB2 (no se si hay driver para eso) :
Ten en cuenta que esto hace que el PostgreSQL cada vez que ejecute una
consulta a la tabla remota trae toda la data de la misma a tu
PostgreSQL (aunque uses un where porque primero jala todo y luego
aplica el filtro), y si son millones de datos esto demora mucho, en
ese caso yo jalaría la data de ambas dbs por el lado de la aplicación
y ahí la cruzaría.
saludos
2009/11/12 "Ing. Marcos Ortiz " <mlortiz(at)uci(dot)cu>:
> Moises Silva escribió:
>> Marcos:
>>
>> Lo que requiero es hacer una sentencia SQL que pueda leer mas de una BASE DE DATOS, por ejemplo esto se maneja en DB2 con librerias, algo como:
>> SELECT * FROM LIBRERIA1/TABLA1 WHERE CAMPO IN (SELECT CAMPO FROM LIBRERIA2/TABLA2 WHERE GESTION = 20099)
>> Donde LIBRERIA1 es BASE DE DATOS 1
>> Donde LIBRERIA2 es BASE DE DATOS 2
>> Como es la sintaxis de BASEDATOS-TABLA en SQL
>> Requiero esto para mantenimiento y verificación de datos de una base de datos que este en funcionamiento y otra data donde restaurar tablas de back up de fechas anteriores.
>>
>> Gracias por tu colaboracion
>>
>> Saludos
>>
>> Moises
>>
>> -----Mensaje original-----
>> De: "Ing. Marcos Ortiz " [mailto:mlortiz(at)uci(dot)cu]
>> Enviado el: Jueves, 12 de Noviembre de 2009 11:27 a.m.
>> Para: Moises Silva
>> CC: pgsql-es-ayuda(at)postgresql(dot)org
>> Asunto: Re: [pgsql-es-ayuda] consulta basica
>>
>>
>> Moises Silva escribió:
>>
>>> Hola lista, tengo la siguiente duda, como se debe hacer una sentencia
>>> SQL para manejar 2 tablas en distintas bases de datos.
>>>
>>> Se agradece los comentarios y opiniones
>>>
>>> Saludos Cordiales
>>>
>>> *Moisés Silva Cárdenas
>>> CADE Informatica
>>> Plaza Venezuela esq. Loayza No 1401
>>> La Paz- Bolivia
>>> ( Telefono: (591-2) 2310390
>>> 2 Fax: (591-2) 2391139*
>>> *e-mail: msilva(at)cadebsa(dot)com*
>>>
>>>
>>>
>> Esto lo puedes hacer con dblink, conectándote directo a la otra base de
>> datos, o montando la tabla remota como si fuera otra tabla de tu base de
>> datos.
>> Aquí te dejo el ejemplo de la documentación oficial. Espero que te sirva
>> de algo.
>>
>> Saludos
>> **************************************************
>>
>> select dblink_connect(’dbname=postgres’);
>> dblink_connect
>> ----------------
>> OK
>> (1 row)
>> select dblink_connect(’myconn’, ’dbname=postgres’);
>> dblink_connect
>> ----------------
>> OK
>> (1 row)
>> -- FOREIGN DATA WRAPPER functionality
>> -- Note: local connection must require password authentication for this
>> to work properl
>> -- Otherwise, you will receive the following error from
>> dblink_connect():
>> --
>> ----------------------------------------------------------------------
>> -- ERROR: password is required
>> -- DETAIL: Non-superuser cannot connect if the server does not
>> request a passwor
>> -- HINT: Target server’s authentication method must be changed.
>> CREATE USER dblink_regression_test WITH PASSWORD ’secret’;
>> CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
>> CREATE SERVER fdtest FOREIGN DATA WRAPPER postgresql OPTIONS (hostaddr
>> ’127.0.0.1’, dbn
>> CREATE USER MAPPING FOR dblink_regression_test SERVER fdtest OPTIONS
>> (user ’dblink_regr
>> GRANT USAGE ON FOREIGN SERVER fdtest TO dblink_regression_test;
>> GRANT SELECT ON TABLE foo TO dblink_regression_test;
>> \set ORIGINAL_USER :USER
>> \c - dblink_regression_test
>> SELECT dblink_connect(’myconn’, ’fdtest’);
>> dblink_connect
>> ----------------
>> 1899
>> dblink_connect
>> OK
>> (1 row)
>> SELECT * FROM dblink(’myconn’,’SELECT * FROM foo’) AS t(a int, b text, c
>> text[]);
>> a | b | c
>> ----+---+---------------
>> 0 | a | {a0,b0,c0}
>> 1 | b | {a1,b1,c1}
>> 2 | c | {a2,b2,c2}
>> 3 | d | {a3,b3,c3}
>> 4 | e | {a4,b4,c4}
>> 5 | f | {a5,b5,c5}
>> 6 | g | {a6,b6,c6}
>> 7 | h | {a7,b7,c7}
>> 8 | i | {a8,b8,c8}
>> 9 | j | {a9,b9,c9}
>> 10 | k | {a10,b10,c10}
>> (11 rows)
>> \c - :ORIGINAL_USER
>> REVOKE USAGE ON FOREIGN SERVER fdtest FROM dblink_regression_test;
>> REVOKE SELECT ON TABLE foo FROM dblink_regression_test;
>> DROP USER MAPPING FOR dblink_regression_test SERVER fdtest;
>> DROP USER dblink_regression_test;
>> DROP SERVER fdtest;
>> DROP FOREIGN DATA WRAPPER postgresql;
>>
>>
>>
> Ya te digo, hay una forma con dblink, cargar la tabla o las tablas de tu
> base de datos remota en tu schema como si fuera una local, pero ahora no
> recuerdo dónde puse el ejemplo.
>
> Saludos
>
> --
>
> "For me, the purpose is, at least partly, to have joy. Programmers often
> feel joy when they can concentrate on the creative side of programming,
> so Ruby is designed to make programmers happy."
> Yukihiro Matsumoto (Matz), Creator of the Ruby Language
>
> Ing. Marcos Luís Ortíz Valmaseda
> PostgreSQL SysDBA && Rails Developer
> BI and DWH Apprentice
> Centro de Tecnologías de Almacenamiento y Análisis de Datos (CENTALAD)
> Universidad de las Ciencias Informáticas (http://www.uci.cu)
>
> Linux User # 418229
>
> http://www.postgresql.org
> http://www.postgresql-es.org
> http://www.rubyonrails.org
> http://www.ruby-lang.org/es/
> http://www.planetrubyonrails.org/
> http://www.planetpostgresql.org
>
>
>
> --
> TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
>
--
Inscribete en las listas de APESOL
http://www.apesol.org/listas.php
Visita
http://www.eqsoft.net
Manuales, noticias, foros, etc.
From | Date | Subject | |
---|---|---|---|
Next Message | Xavier Guerra | 2009-11-12 17:56:41 | Centralizar informacion de bases de datos |
Previous Message | Ing. Marcos Ortiz | 2009-11-12 16:26:15 | Re: consulta basica |