任何人都可以提供一个示例(涉及各种SQL语句)如何在postgresql中使用外部数据包装器来启用postgresql数据库A中的表从postgresql数据库B连接到表吗?
从文档中不清楚pgsql 9.0与9.1中可用的FDW功能的程度。文档也没有任何示例显示如何使用FDW在2个不同的postgresql数据库(使用WHERE限定符下推)之间进行连接。
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/
答案 0 :(得分:6)
你就像任何一张桌子一样操纵它。 Per Depesz的帖子:
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的主题:
答案 1 :(得分:3)
我找到的最简单的解决方案是 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 qualifier push-down”就像你所说的那样。你当然可以在第一个语句中选择你需要它们的行......
答案 2 :(得分:1)
如果你想加入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