PostgreSQL使用DBlink实现在线迁移数据
2013-07-20 09:08
357 查看
(这里假设ubuntu的系统已经编译好了postgresql数据库。不会的可以看我之前那篇postgresql9.1.1手动编译)
好接下来进入本文的正题首先就是要安装编译一下postgresql DBlink
进入到目录/usr/local/posgresql-9.1.1(tar 解压出来的目录)
cd /usr/local/posgresql-9.1.1
[b] 接着进入到dblink的安装目录
[/b]
cd /contrib/dblink
[b] 编译安装dblink[/b]
make && make install
[b] 接着进入到当前目录下的sql目录
[/b]
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 VIEWpostgres=# 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实用语法
比如一个数据db1,db2。首先需要把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 AS2.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. 执行数据操作(update,insert,create等命令)SELECTdblink_exec('connection', 'insert 。。。数据操作');
4. 执行事务提交
SELECT dblink_exec('connection','COMMIT');5. 解除连接SELECTdblink_disconnect('connection');
相关文章推荐
- 使用bulk collect insert实现大数据快速迁移
- PB使用数据管道实现数据的自动迁移和备份
- oracle使用bulk collect insert实现大数据快速迁移
- 使用Oracle的Job+Procedure实现数据的定时迁移备份
- PostgreSQL: 数据迁移之序列问题(也可以使用在所有使用序列数据库上,比如Oracle)
- 使用Sqoop 对 Oracle 做数据迁移 到 PostgreSQL
- 【转发】oracle 使用dblink访问postgresql数据库
- Linux操作系统备份之一:使用LVM快照实现Linux操作系统数据的在线备份
- 大数据IMF传奇行动绝密课程第97课:使用SparkStreaming+SparkSQL实现在线动态计算出特定时间窗口
- 使用Oracle的Job+Procedure实现数据的定时迁移备份
- 一次PostgreSql数据迁移,使用nodejs来完成
- oracle_fdw的使用:从PostgreSQL中访问Oracle数据库,实现数据库数据的同步
- 使用达梦ETL数据交换平台实现mysql数据库向PostgreSQL数据库的自动化迁移
- 使用Oracle的Job+Procedure实现数据的定时迁移备份
- 使用perl实现拆分数据表(mysql)并迁移数据实例
- MSSQLServer 中使用SQLDMO.Transfer 实现数据迁移_转摘
- ORACLE使用dblink实现跨服务器访问数据
- 【Oracle】使用dblink+minus方式迁移数据
- PostgreSQL中使用dblink实现跨库查询的方法
- 使用merge 加 dblink 实现内网中的两个数据同步