本文是 oracle_fdw 编译安装,以及简单使用教程。
1、下载Oracle客户端
网址:https://www.oracle.com/database/technologies/instant-client/downloads.html
根据自己的平台,下载 basic 和 sdk 两个包就可以,为了便于测试,建议下载 sqlplus。
最新版本是 19.3,我使用的是较旧版本 18.1,三个文件:instantclient-basic-macos.x64-18.1.0.0.0.zip
instantclient-sdk-macos.x64-18.1.0.0.0-2.zip
instantclient-sqlplus-macos.x64-18.1.0.0.0.zip
2、解压缩并设置环境变量
放到同一个目录下,注意不要错放子目录,目录内容:libclntsh.dylib(软链接)
libocci.dylib(软链接)
network(目录)
sdk(目录)
...
xstreams.jar
一共24项
这里要设置我们熟知的环境变量ORACLE_HOMEexport ORACLE_HOME==/Users/quanzl/instantclient_18_1
3、用PG源代码编译
进入源代码下的 contrib 目录git clone https://github.com/laurenz/oracle_fdw.git
cd oracle_fdw
make NO_PGXS=1
make install
4、使用二进制PG编译
首先要能够找到 pg_config,将其所在目录设置到 PATH 中export PATH=$PATH:/.../pgsql/bin
克隆代码后直接在 oracle_fdw 下,make即可。
5、设置数据库运行环境变量
此时直接启动数据库可能会提示无法加载 oracle_fdw.so,因为它找不到 oracle 动态库。ERROR: could not load library "/.../lib/postgresql/oracle_fdw.so": dlopen(/.../lib/postgresql/oracle_fdw.so, 10): Library not loaded: @rpath/libclntsh.dylib.18.1Referenced from: .../lib/postgresql/oracle_fdw.soReason: image not found
设置库路径(Linux下是 LD_LIBRARY_PATH )export DYLD_LIBRARY_PATH=/Users/quanzl/instantclient_18_1
6、测试Oracle服务cd Users/quanzl/instantclient_18_1
./sqlplus scott/tiger@192.168.x.x/服务名
SQL*Plus几十年如一日的难用,建议使用其他工具。
7、创建服务器和用户映射CREATE SERVER oracle_svr FOREIGN DATA WRAPPER oracle_fdw
OPTIONS (dbserver '192.168.x.x/服务名');
CREATE USER MAPPING FOR PUBLIC SERVER oracle_svr
OPTIONS (user 'scott', password 'tiger');
8、建外部表测试数据CREATE FOREIGN TABLE dept(
deptno smallint,
dname text,
loc text)
SERVER oracle_svr
OPTIONS (table 'DEPT');
这里要注意,选项 table 大小写必须与Oracle对应表名严格一致。
请参考:https://github.com/laurenz/oracle_fdw
本期没有代码,下期一定有,我们将尝试解决一个现有问题。
欢迎关注我