Как использовать PostgreSQL Foreign Data Wrapper для объединения двух разных баз данных postgresql - PullRequest
5 голосов
/ 17 июля 2011

Может ли кто-нибудь привести пример (с различными задействованными операторами SQL) того, как использовать сторонние оболочки данных в postgresql для включения таблицы из базы данных postgresql A в таблицу из базы данных postgresql B?

Из документации неясно, в какой степени функциональность FDW доступна в pgsql 9.0 по сравнению с 9.1. В документах также нет примеров, показывающих, как объединить 2 разные базы данных postgresql (с опусканием квалификатора WHERE) с помощью FDW.

http://www.postgresql.org/docs/9.0/static/sql-createforeigndatawrapper.html

http://www.postgresql.org/docs/9.1/static/ddl-foreign-data.html

http://www.depesz.com/index.php/2011/03/14/waiting-for-9-1-foreign-data-wrapper/

Ответы [ 3 ]

6 голосов
/ 17 июля 2011

Вы манипулируете им, как любой стол. За сообщение Депеша:

CREATE FOREIGN TABLE passwd (
    username text,
    pass text,
    uid int4,
    gid int4,
    gecos text,
    home text,
    shell text
) SERVER file_server
OPTIONS (format 'text', filename '/etc/passwd', delimiter ':', null '');

select * from passwd;

В документах нет примеров объединения таблиц по уважительной причине: это простой старый SQL ...

В данный момент объединение является объектом GSOC:

3 голосов
/ 13 февраля 2013

Самое простое решение, которое я нашел, это расширение dblink .Я проверил это на PostgreSQL 9.1:

create extension dblink.
select * from dblink('port=5452 host=localhost dbname=mydb user=myuser password=xxx', 
                     'select id,spaltenname from variablen') as v (a int, b varchar(20));

http://www.postgresql.org/docs/9.1/static/dblink.html

Простое объединение будет выглядеть так:

with a as (select * from dblink('port=5452 host=localhost dbname=mydb user=myuser password=xxx', 'select id,spaltenname from variablen') as v (a int, b varchar(20)))
select a join (select 1)b on (true);

Приведенный выше пример позволяет объединить таблицуна другом сервере postgresql, но это просто копия, а затем присоединиться.Нет автоматического "WHERE квалификатора push-down", как вы его назвали.Конечно, вы можете просто выбрать строки, ГДЕ они вам нужны в первом утверждении ...

1 голос
/ 08 мая 2013

Если вы хотите объединить 2 разные базы данных postgresql, я рекомендую вам использовать dblink:

select datos.* 
     FROM dblink('hostaddr=192.168.0.10 port=5432 dbname=my_dbname user=my_user password=my_pass'::text, ' 
               select field_1, field_2 
               from my_table  order by field_1
               '
               ::text) 
      datos(field_1, integer, field_2 character varying(10));

(я тестировал его на PostgreSQL 9.1.3) http://www.postgresql.org/docs/9.2/static/contrib-dblink-function.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...