PostgreSQL编译安装oracle_fdw

2023-01-12  本文已影响0人  芼芼567

新需求,老板要在pg数据库中外链到oracle,

环境

1.去Oracle官网下载Oracle客户端

https://www.oracle.com/database/technologies/instant-client/downloads.html
这里我们选择 Instant Client for Linux x86-64
需要下载三个包
instantclient-basic-linux.x64-21.8.0.0.0dbru.zip
instantclient-sqlplus-linux.x64-21.8.0.0.0dbru.zip
instantclient-sdk-linux.x64-21.8.0.0.0dbru.zip
将其解压到同一个文件夹中

unzip instantclient-basic-linux.x64-21.8.0.0.0dbru.zip
unzip instantclient-sqlplus-linux.x64-21.8.0.0.0dbru.zip
unzip instantclient-sdk-linux.x64-21.8.0.0.0dbru.zip

设置环境变量ORACLE_HOME

export ORACLE_HOME==/home/nyy/instantclient_21_8

2.安装oracle_fdw插件

下载插件源码
https://github.com/laurenz/oracle_fdw
编译

make
make install

make的时候出现找不到头文件的错误,试了好多方法都不行,最终把头文件都复制到插件源码目录下成功了

cp /home/nyy/instantclient_21_8/sdk/include/* ./

在pg数据库中执行安装插件命令

CREATE EXTENSION oracle_fdw;

此步骤中可能会报找不到动态库的错误

  1. libclntsh.so
CREATE EXTENSION oracle_fdw
> 错误:  无法加载库 "/usr/lib/postgresql/13/lib/oracle_fdw.so": libclntsh.so.21.1: 无法打开共享对象文件: 没有那个文件或目录

libclntsh.so.21.1这个文件在Oracle客户端的源码中,所以需要将其包含到动态链接库中
vi /etc/ld.so.conf.d/oracle-x86_64.conf添加以下内容

/home/nyy/instantclient_21_8

再执行

ldconfig
  1. libaio.so
CREATE EXTENSION oracle_fdw
> 错误:  无法加载库 "/usr/lib/postgresql/13/lib/oracle_fdw.so": libaio.so.1: 无法打开共享对象文件: 没有那个文件或目录

libaio.so.1这个文件没有,需要安装

apt install libaio-dev

解决完依赖的问题之后就能正常安装插件了

CREATE EXTENSION oracle_fdw
> OK

3.pg外链到Oracle

  1. 创建Oracle数据库映射
CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//192.168.52.102:1521/ntc.192.168.52.102');
  1. 授予用户访问权限
    授予postgres用户访问oradb 服务的权限
grant usage on foreign server oradb to postgres;
  1. 创建用户映射
    将postgres用户映射为oradb的用户
CREATE USER MAPPING FOR postgres SERVER oradb OPTIONS (user 'ntc', password 'ntc');
  1. 创建Oracle外部表
CREATE FOREIGN TABLE o_m_kensakijyu(
    KANRIBUSYO_CD character varying(10) OPTIONS (key 'true') NOT NULL , 
    KESAKIJYU_CD character varying(3) OPTIONS (key 'true') NOT NULL , 
    KAKUDUKE character varying(4) OPTIONS (key 'true') NOT NULL , 
    UTIWAKE character varying(10) OPTIONS (key 'true') NOT NULL , 
    KETENSU numeric(6,0) DEFAULT 0, 
    BABUN numeric(6,0) DEFAULT 0, 
    YUTEIKESA character varying(60), 
    KESAKIJYU character varying(30), 
    TUKA character varying(200), 
    NYUKO_TYO character varying(200), 
    KETEN_SU character varying(200), 
    JYUDAI_KETEN character varying(200), 
    SOKUDO character varying(200), 
    TOUKOU character varying(200), 
    BABUN_KEISAN character varying(200), 
    HABA_HIRO character varying(200), 
    MITUDO character varying(200), 
    BIKO character varying(200), 
    SEISEI_BI DATE, 
    SEISEI_PROGRAM_ID character varying(30), 
    SEISEI_SHA_USER_ID character varying(16), 
    KOSHIN_BI DATE, 
    KOSHIN_PROGRAM_ID character varying(30), 
    KOSHIN_SHA_USER_ID character varying(16)
) SERVER oradb OPTIONS (schema 'NTC', table 'M_KENSAKIJYU');

4完成,

上一篇下一篇

猜你喜欢

热点阅读