在postgresql数据库中,oracle_fdw是postgresql数据库支持的外部扩展。通过使用oracle_fdw扩展可以读取到oracle数据库中的数据。它是一种非常方便且常见的postgresql与oracle的同步数据的方法。使用oracle_fdw扩展需要依赖oracle的instance client环境。
下面通过具体的步骤来演示如何使用oracle_fdw扩展。
(1)从oracle官方网站下载以下3个oracle instance client安装包,如下图所示。
instantclient-basic-linuxx64.zip instantclient-sdk-linuxx64.zip instantclient-sqlplus-linuxx64.zip
(2)解压三个文件包。
unzip instantclient-basic-linuxx64.zip unzip instantclient-sdk-linuxx64.zip unzip instantclient-sqlplus-linuxx64.zip
(3)解压后会生成instantclient_21_10目录,将其更名为instantclient
mv instantclient_21_10 instantclient
(4)设置oracle环境变量。
export oracle_home=/home/postgres/tools/instantclient export oci_lib_dir=$oracle_home export oci_inc_dir=$oracle_home/sdk/include export ld_library_path=$oracle_home:$ld_library_path
(5)从github上下载oracle_fwd扩展,并解压安装包,如下图所示。
(6)设置pg_config的环境变量,并编译oracle_fdw扩展。
export path=/home/postgres/training/pgsql/bin:$path cd oracle_fdw-oracle_fdw_2_5_0/ make make install
(7)使用root用户添加oracle依赖的库信息,添加完成后切换回postgres用户。
su - echo "/home/postgres/tools/instantclient/" >> /etc/ld.so.conf ldconfig su - postgres
(8)启动postgresql数据库服务器,并登录postgresql数据库实例创建oracle_fdw扩展。
postgres=# create extension oracle_fdw;
(9)查看当前postgresql数据库中已安装的扩展。
postgres=# \dx # 输出的信息如下: list of installed extensions -[ record 1 ]--------------------------------------------------- name | file_fdw version | 1.0 schema | public description | foreign-data wrapper for flat file access -[ record 2 ]--------------------------------------------------- name | oracle_fdw version | 1.2 schema | public description | foreign data wrapper for oracle access -[ record 3 ]--------------------------------------------------- name | plpgsql version | 1.0 schema | pg_catalog description | pl/pgsql procedural language -[ record 4 ]--------------------------------------------------- name | postgres_fdw version | 1.0 schema | public description | foreign-data wrapper for remote postgresql servers
(10)创建基于oracle_fdw的外部数据库服务。
postgres=# create server oracle_fdw foreign data wrapper oracle_fdw options(dbserver '//192.168.79.173:1521/orcl'); # 这里创建的外部数据库服务名称叫oracle_fdw, # 并通过参数dbserver指定了外部oracle数据库的地址信息。
(11)查看当前数据库中移创建的外部服务。
postgres=# \des+ # 输出的信息如下: list of foreign servers -[ record 1 ]--------+---------------------------------------- name | foreign_server owner | postgres foreign-data wrapper | postgres_fdw access privileges | type | version | fdw options | (host '192.168.79.178', port '5432', dbname 'scott') description | -[ record 2 ]--------+---------------------------------------- name | oracle_fdw owner | postgres foreign-data wrapper | oracle_fdw access privileges | type | version | fdw options | (dbserver '//192.168.79.173:1521/orcl') description | -[ record 3 ]--------+----------------------------------------------- name | service_file owner | postgres foreign-data wrapper | file_fdw access privileges | type | version | fdw options | description |
(12)创建postgresql和oracle之间的用户映射。
postgres=# create user mapping for postgres server oracle_fdw options (user 'c##scott', password 'tiger'); # 该语句为本地postgres用户创建了一个访问 # 远程服务器oracle_fdw时的用户映射, # 也就是使用用户名c##scott和密码 tiger连接远程服务器。
(13)查看用户映射信息。
postgres=# \deu+ # 输出的信息如下: list of user mappings -[ record 1 ]------------------------------------------ server | foreign_server user name | postgres fdw options | ("user" 'postgres', password 'welcome_1') -[ record 2 ]------------------------------------------ server | oracle_fdw user name | postgres fdw options | ("user" 'c##scott', password 'tiger')
(14)在postgresql数据库中创建外部表访问oracle中的数据。
postgres=# create foreign table oracle_emp( empno numeric(4,0) options (key 'true') not null, ename varchar(10), job varchar(9) , mgr numeric(4,0), hiredate timestamp, sal numeric(7,2) , comm numeric(7,2), deptno numeric(2,0) )server oracle_fdw options (schema 'c##scott', table 'emp'); # 注意,这里的'c##scott'和'emp'需要大写。
(15)现在可以在本地数据库中通过外部表访问oracle数据库中对应的远程表。
postgres=# select * from oracle_emp; # 输出的信息如下: empno | ename |...| sal | comm | deptno -------+--------+---+---------+---------+-------- 7369 | smith |...| 800.00 | | 20 7499 | allen |...| 1600.00 | 300.00 | 30 7521 | ward |...| 1250.00 | 500.00 | 30 7566 | jones |...| 2975.00 | | 20 7654 | martin |...| 1250.00 | 1400.00 | 30 7698 | blake |...| 2850.00 | | 30 7782 | clark |...| 2450.00 | | 10 7788 | scott |...| 3000.00 | | 20 7839 | king |...| 5000.00 | | 10 7844 | turner |...| 1500.00 | 0.00 | 30 7876 | adams |...| 1100.00 | | 20 7900 | james |...| 950.00 | | 30 7902 | ford |...| 3000.00 | | 20 7934 | miller |...| 1300.00 | | 10 (14 rows)
到此这篇关于在postgresql中访问oracle的具体步骤的文章就介绍到这了,更多相关postgresql访问oracle内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论