当前位置: 代码网 > it编程>数据库>MsSqlserver > 在PostgreSQL中访问Oracle的具体步骤

在PostgreSQL中访问Oracle的具体步骤

2025年05月22日 MsSqlserver 我要评论
在postgresql数据库中,oracle_fdw是postgresql数据库支持的外部扩展。通过使用oracle_fdw扩展可以读取到oracle数据库中的数据。它是一种非常方便且常见的postg

在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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com