oracle同步数据到PostgreSQL——oracle_fdw

1、安装oracle_fdw
可以去pgxn上下载对应的安装包。

1.1、安装oracle客户端
我这里使用的是pg的操作系统用户安装,也可以使用root用户安装(但是要设置pg用户的环境变量)
pg12@oracle-> tar -zxvf instantclient_11_2.tar.gz
pg12@oracle-> mv instantclient_11_2/ instantclient/
pg12@oracle-> cd instantclient

设置环境变量
export ORACLE_HOME=/opt/oracle/instantclient
export OCI_LIB_DIR= O R A C L E H O M E e x p o r t O C I I N C D I R = ORACLE_HOME export OCI_INC_DIR= ORACLEHOMEexportOCIINCDIR=ORACLE_HOME/sdk/include

#保存退出,试环境变量生效
source /etc/profile

1.2、解压oracle_fdw
pg12@oracle-> unzip oracle_fdw-2.2.0.zip
pg12@oracle-> cd oracle_fdw-2.2.0
#编译
pg12@oracle->make
#安装
pg12@oracle-> make install

2、创建oracle_fdw扩展

bill=# create extension oracle_fdw;
CREATE EXTENSION

这一步可能会出现类似这样的错误:

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

在ORACLE_HOME下找到对应的so文件,然后建立软连接(注意:这里要使用绝对路径)
pg12@oracle-> ln -s /home/pg12/instantclient/lib/libclntsh.so /home/pg12/pgsql12.4/lib/libclntsh.so

然后再次创建,如果还是提示缺少so文件,重复上述操作,基本就不会有问题了。

3、使用oracle_fdw

bill=# CREATE SERVER oradb_bill FOREIGN DATA WRAPPER oracle_fdw
          OPTIONS (dbserver 'oradb');
bill=# create user mapping for bill server oradb_bill options(user 'orauser',password 'orapwd');
bill=# GRANT USAGE ON FOREIGN SERVER oradb_bill TO bill;
bill=# create foreign table fdw_test1(
id int,
info varchar(10)
) server oradb_bill options(schema 'orauser',table 'TEST1');

注意create server里面使用的’oradb’需要先在oracle客户端的tnsnames文件里面先配置好。

然后就可以查看oracle中对应表的数据了

bill=# select * from fdw_test1 ;
 id | info 
----+------
  1 | bill
(1 row)

同样也支持增删改查操作:
–pg中插入数据

bill=# insert into fdw_test1 values(2,'aaa');
INSERT 0 1

–oracle中查看

SQL> select * from test1;

        ID INFO
---------- ----------
         1 bill
         2 aaa

你可能感兴趣的:(PostgreSQL)