(这里假设ubuntu的系统已经编译好了postgresql数据库。不会的可以看我之前那篇postgresql9.1.1手动编译)

   好接下来进入本文的正题


   首先就是要安装编译一下postgresql DBlink

   进入到目录/usr/local/posgresql-9.1.1(tar 解压出来的目录)

   cd /usr/local/posgresql-9.1.1

   

   接着进入到dblink的安装目录

   cd /contrib/dblink

   编译安装dblink

   make && make install

   

   接着进入到当前目录下的sql目录

   cd  ./sql

   cat dblink.sql | /usr/local/pgsql/bin/psql


   到此为止,dblink的编译安装就结束了,接下来是实用dblink传导数据部分

1,进入数据库 ./psql postgres

 2,使用dblink链接远程的数据库(ipaddr=192.168.x.x port=5432 dbname=databasename user=username password=xxxxxxx)

命令如下:

postgres=#select dblink_connect('connection','hostaddr=192.168.x.x port=5432 dbname=test user=test password=test');

看到如下,说明链接成功

   dblink_connect

----------------

OK

(1 row)

3, 查询远程的数据表my_table(事先知道表结构) 的内容,,命令如下(这里我限定了条件first=1):

postgres=#  select * from dblink('hostaddr=192.168.x.x port=5432 dbname=tset user=test password=test','select * from my_table wherefirst=1') as t1 (a integer, address char(10));

结果如下。

a |  address    

---+--------------

1 | 杭州

1 | 杭州

1 | 杭州

1 | 杭州

1 | 杭州

1 | 杭州

(6rows)

4.方便起见这里创建一个试图用于后面的插入数据

命令:create  view test as select * from dblink('hostaddr=192.168.0.199port=5432 dbname=zhang user=test password=test','select * from my_table wherefirst=1') as t1 (first integer, address char(10));

结果:

CREATE VIEW

postgres=# select * from test;

first |   address  

-------+--------------

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

(6 rows)

此时查看一下试图,可以看到内容已经有了

postgres=# select * from test;

first |   address  

-------+--------------

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

5.在本地创建好数据表,结构相同

Create table aa (first int, addresschar(10));

6将数据插入到本地的数据表中

postgres=# insert into aa(first ,address)select first,addressfrom test;

7.查看本地数据表,确认数据已经导入

postgres=# select * from aa;

first |  address  

-------+------------

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州

    1 | 杭州



  这里附上简单dblink实用语法

   比如一个数据db1db2。首先需要把db1加入dblink扩展。

示例1:取得db2的用户表的用户名

1.SELECT * FROM dblink('hostaddr=192.168.x.x port=5432 dbname=db2 user=postgres password=postgres',  

2.'SELECT user_name From people') AS t(user_name text);  


如果认为每次查询都要写dblink的一堆信息很麻烦的话,可以在db1中建一个view来解决。

1.CREATEVIEW remote_people_user_name AS

2.SELECT * FROM dblink('hostaddr=192.168.x.x port=5432 dbname=db2 user=postgres password=postgres',  

3.'SELECT user_name From people') AS t(user_name text);

然后就可以从这个view中查询数据了。

1.SELECT * FROM remote_people_user_name;  


如果不只是查询数据,而是需要修改db2的数据的情况下怎么弄呢?

1. 先执行dblink_connect保持连接

1.SELECT dblink_connect('connection','hostaddr=192.168.x.x port=5432 dbname=db2 user=postgres password=postgres');  

2.执行BEGIN命令

SELECTdblink_exec('connection', 'BEGIN');

3. 执行数据操作(updateinsertcreate等命令)

SELECTdblink_exec('connection', 'insert 。。。数据操作');


4.
执行事务提交

SELECT dblink_exec('connection','COMMIT');

5. 解除连接

SELECTdblink_disconnect('connection');