PostgreSQL使用DBlink实现在线迁移数据
(这里假设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 postgres2,使用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 | 杭州 杭州 (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 | 杭州 (6 rows) 此时查看一下试图,可以看到内容已经有了 杭州 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 -------+------------ 杭州 这里附上简单dblink实用语法 比如一个数据db1,db2。首先需要把加入dblink扩展。 示例1:取得的用户表的用户名 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来解决。 CREATEVIEW remote_people_user_name AS 2.3. t(user_name text);
然后就可以从这个中查询数据了。 remote_people_user_name; 如果不只是查询数据,而是需要修改db2的数据的情况下怎么弄呢? 1. 先执行dblink_connect保持连接 dblink_connect('connection'); 2.执行BEGIN命令 SELECTdblink_exec('connection','BEGIN'); 3. 执行数据操作(update,insertcreate等命令) 。。。数据操作');
SELECT dblink_exec('connection','COMMIT'); 5. 解除连接 SELECTdblink_disconnect('connection'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |