文档章节

PostgreSQL跨库操作Oracle利器-Oracle_fdw

遥想公瑾当年
 遥想公瑾当年
发布于 2017/06/01 09:47
字数 796
阅读 31
收藏 0
点赞 0
评论 0

Oracle_fdw是PG的一个外部数据接口,可以使PostgreSQL轻松跨库操作Oracle。Oracle_fdw的作用有以下两点:

  • PG可以跨库增删改查Oracle中的表,可以查询Oracle的视图,可以使PG中的表和Oracle中表/视图作Join查询,类似dblink的功能。
  • 快速将Oralce表迁移进入PostgreSQL。 本文简单介绍下Oracle_fdw的安装和使用。

一 Oracle_fdw安装

官方地址:http://pgxn.org/dist/oracle_fdw/ ,选择一个版本下载。

1.1 安装Oracle Instant Client

oralce官网下载 'Basic' and 'SDK',假如下载后文件所在位置在/opt/oracle中。

cd /opt/oracle
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip
mv instantclient_12_2 instantclient
cd instantclient
#建立一下软连接
ln -s libclntsh.so.12.1 libclntsh.so
#设置环境变量
vi /etc/profile
#边界内容如下:
#oracle_home一定要写,否则编译会报错
export ORACLE_HOME=/opt/oracle/instantclient
export OCI_LIB_DIR=$ORACLE_HOME
export OCI_INC_DIR=$ORACLE_HOME/sdk/include
#保存退出
#重启用profile文件
source /etc/profile

##1.2 编译oracle_fdw 启用postgres用户环境变量

[root@bogon opt]# source /home/postgres/.bashrc

解压oracle_fdw

[root@bogon opt]# unzip oracle_fdw-1.5.0.zip 

编译安装oracle_fdw

[root@bogon opt]# cd oracle_fdw-1.5.0
#编译
[root@bogon oracle_fdw-1.5.0]# make
#安装
[root@bogon oracle_fdw-1.5.0]# make install

没报错的话,代表安装成功了,有时候会报一找不到.h头文件的错误,比如:

fatal err:oci.h:No such file or directory
#或者
fatal err:stdio.h:No such file or directory

错误截图1.png 都证明ORACLE_HOME没指定或没有正确配置,需检查环境变量及其文件对应是否正确。

二 创建oracle_fdw扩展

postgres=# create extension oracle_fdw;
CREATE EXTENSION

代表创建成功,如果遇到下面这个问题:

postgres=# create extension oracle_fdw;
ERROR:  could not load library "/home/postgres/lib/oracle_fdw.so": libclntsh.so: cannot open shared object file: No such file or directory

是缺少so文件了,有时候编译成功了,还是会缺不少文件,用ldd查看下oracle_fdw.so的依赖:

[postgres@localhost lib]$ ldd oracle_fdw.so 
	linux-vdso.so.1 =>  (0x00007fff5973b000)
	libclntsh.so.12.1 => not found
	libc.so.6 => /lib64/libc.so.6 (0x00007fa9c8185000)
	libmql1.so => not found
	libipc1.so => not found
	libnnz12.so => not found
	libons.so => not found
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fa9c7f6d000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fa9c7c6b000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa9c7a4f000)
	libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fa9c7835000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fa9c762d000)
	libaio.so.1 => /lib64/libaio.so.1 (0x00007fa9c742b000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa9c7210000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa9cc20e000)
	libclntshcore.so.12.1 => not found
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa9c6ffa000)

对于这些not found的so文件,我们在ORACLE_HOME目录中发现是存在的,如下图:

ORACLE_HOME.png 因此需要手动建立一下软连接:

ln -s /opt/oracle/instantclient/libclntsh.so.12.1  /home/postgres/lib/libclntsh.so.12.1
ln -s /opt/oracle/instantclient/libmql1.so  /home/postgres/lib/libmql1.so
ln -s /opt/oracle/instantclient/libipc1.so  /home/postgres/lib/libipc1.so
ln -s /opt/oracle/instantclient/libnnz12.so  /home/postgres/lib/libnnz12.so
ln -s /opt/oracle/instantclient/libons.so  /home/postgres/lib/libons.so
ln -s /opt/oracle/instantclient/libclntshcore.so.12.1  /home/postgres/lib/libclntshcore.so.12.1

再次创建oracle_fdw:

postgres=# create extension oracle_fdw;
CREATE EXTENSION

应该就能创建成功了。

三 使用oracle_fdw

postgres=# create server oradb_215 foreign data wrapper oracle_fdw options(dbserver '10.144.15.215:1521/mcsas');
postgres=# grant usage on foreign server oradb_215 to postgres;
postgres=# create user mapping for postgres server oradb_215 options(user 'MG_APP',password 'QWERasdf');
postgres=# create foreign table ZWGK_SJJC_FBYJ_GTSJHD123
(
  OBJ_ID  VARCHAR(42) not null,
  XLMC    VARCHAR(50),
  DYDJ    VARCHAR(50),
  GTXH    VARCHAR(50),
  SJFBHD  VARCHAR(50),
  SSBQ    VARCHAR(50),
  BNHD    VARCHAR(50),
  SSWS    VARCHAR(50),
  PMSGTID VARCHAR(150),
  PMSGTBH VARCHAR(150),
  SFCL    VARCHAR(150)
) server oradb_215 options(schema 'MG_APP',table 'ZWGK_SJJC_FBYJ_GTSJHD');
postgres=# select * from ZWGK_SJJC_FBYJ_GTSJHD123 limit 10;

  这样,将oracle中MG_APP.ZWGK_SJJC_FBYJ_GTSJHD表“映射”到pg了,可以查询了。

© 著作权归作者所有

共有 人打赏支持
遥想公瑾当年
粉丝 6
博文 11
码字总数 17519
作品 0
南京
高级程序员
PostgreSQL的postgres_fdw跨库使用

PostgreSQL的数据库逻辑上是相互独立的,和Oracle类似,如果要访问其他数据库,需要做跨库操作,Postgres本身提供了一些扩展,比如dblink,pgsqlfdw等,高版本的建议使用postgresfdw,也就是p...

kenyon_君羊
2014/04/01
0
4
postgresql9.5 物化视图测试

copyright http://cupegraf.com/ 视图是指数据库只存储定义该视图的查询语句(内容是查询时产生),而物化视图是一个其查询语句查询后的内容并存储的视图(内容是创建物化视图刷新视图时产生,...

廖君
2015/07/30
0
0
Oracle migration to Greenplum - (含 Ora2pg)

标签 PostgreSQL , Oracle , Greenplum , PL/SQL , Ora2pg 背景 Oracle在OLTP领域毫无疑问是非常不错的数据库,但是OLAP领域,可以有更好的选择,特别是在数据量大到一定程度的时候,Oracle用...

德哥
05/06
0
0
科普一种可以将PG变成通用SQL引擎的技术

作者介绍 伊翼,网名“小wing”,野生PG爱好者,从事数据库相关工作已近十年,目前供职于全球最大的通讯设备供应商。 原标题:《当FDW遇上GO》 FDW(Foreign Data Wrapper)是PostgreSQL(下...

伊翼
06/14
0
0
PostgreSQL 自动创建分区实践 - 写入触发器

标签 PostgreSQL , 自动创建分区 , 触发器 , 写入 , 动态创建分区 背景 数据写入时,自动创建分区。 目前pg_pathman这个分区插件,有这个功能,如果你不是用的这个插件,可以考虑一下用触发器...

德哥
06/21
0
0
file_fdw创建外部表及其与普通表的结合

参考原文:http://www.open-open.com/lib/view/open1380594167635.html postgresql从9.1开始增加了外部表访问的功能,这个功能就是数据库直接读取数据库以外的文件,比如csv或者text等类型的...

YuanyuanL
2015/01/20
0
0
PostgreSQL的外部表使用

postgresql从9.1开始增加了外部表访问的功能,这个功能就是数据库直接读取数据库以外的文件,比如csv或者text等类型的文件,暂时不支持DML。postgresql有各种插件能直连各种异构DB,如oracl...

kenyon_君羊
2013/09/30
0
14
PostgreSQL报跨库异常及解决一例

今天群里一个哥们发了个错误信息: ERROR: cross-database references are not implemented: "public.test.id" 错误 ERROR: cross-database references are not implemented: "public.test.i......

kenyon_君羊
2012/11/21
0
6
Oracle DBA 增值 PostgreSQL,Greenplum 学习计划

标签 PostgreSQL , Oracle , Greenplum 背景 去O很大程度上是国家层面的战略考虑,比如斯诺登事件,最近贸易战的“中兴”事件,使得去O成为一个不可不做的事情。 但是去O喊了若干年,并没有真...

德哥
05/06
0
0
PostgreSQL数据库dblink和postgres_fdw扩展使用比较

在之前的两篇文章中,章郎虫分别介绍了dblink和postgresfdw两个扩展。今天我在这里初略地说下使用dblink和postgresfdw后的实际感受和区别。 postgresfdw远程可写功能是9.3版本出来后才新加的...

章郎虫
2013/11/07
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

fiddle 4 初始化

下载 配置fiddle 4 如果证书导出失败,执行下面脚本 D:\programs\Fiddler>makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.c......

柯里昂
3分钟前
0
0
rabbitmq学习记录(六)交换机Exchange-direct

实现功能:一条消息发送给多个消费者 交换机模式:direct 相比于之前的fanout模式,可以进一步的筛选获取消息的消费者。 fanout模式下,只要消费者监听的队列,已经与接收生产者消息的交换机...

人觉非常君
20分钟前
0
0
Java 之 枚举

Java 中声明的枚举类,均是 java.lang.Enum 类的子类,Enun 类中的常用方法有: name() 返回枚举对象名称 ordinal() 返回枚举对象下标 valueOf(Class enumType, String name) 转换枚举对象 ...

绝世武神
28分钟前
0
0
使用爬虫实现代理IP池之放弃篇

啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的),白话说就是能联网并提供代理访问互联网的服务器,它提供的...

一别丶经年
44分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
今天
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
今天
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
今天
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
今天
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部