当前位置: gbaiyou->培训 > PostgreSQL技术大讲堂 - 第27讲:Oracle-FDW部署

PostgreSQL技术大讲堂 - 第27讲:Oracle-FDW部署

2023-08-30作者:gbaiyou来源:www.gbaiyou.com

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。


第27讲:Oracle-FDW部署


内容1 : Foreign Data Wrappers(FDW)简介与特性

内容2 : Oracle_FDW部署

内容3 : FDW执行原理


Foreign Data Wrappers

Foreign Data Wrappers (FDW)




FDW部署

部署FDW(在客户端部署)

1、安装 oracle 19c client(postgres用户)

mkdir /usr/local/oracle

unzip -d /usr/local/oracle instantclient-basic-linux.x64-19.6.0.0.0dbru.zip

unzip -d /usr/local/oracle instantclient-sdk-linux.x64-19.6.0.0.0dbru.zip

2、配置环境变量(临时设置)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pg12.2/lib:/usr/local/oracle/instantclient_19_6/

export PATH=$PATH:/usr/local/pg12.2/bin

export ORACLE_HOME=/usr/local/oracle/instantclient_19_6

3、编译oracle_fdw(需要单独下载)

unzip oracle_fdw-2.2.0.zip

cd oracle_fdw-2.2.0

make

make install

4、安装oracle_fdw插件(哪个database上使用,就在哪个database上安装)

create extension oracle_fdw;

执行会报错:

ERROR: could not load library "/usr/local/pgsql-10.6/lib/oracle_fdw.so": libclntsh.so.11.1: cannot open shared object file: No such file or directory

1、通过以下步骤解决(root),编辑 /etc/ld.so.conf.d/oracle-x86_64.conf

/usr/local/oracle/instantclient_11_2

-------------------------------------

/usr/local/oracle/instantclient_19_6

2、执行

ldconfig

5、创建fdw服务器

CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw

OPTIONS (dbserver '//pg1:1521/PROD1');

pg1:远程oracle主机名

1521:远程oracle数据库监听端口

PROD1:远程oracle service名字

6、授权

GRANT USAGE ON FOREIGN SERVER pgdb TO oracle_fdw1;

7、创建用户映射(本地用户与远程用户映射)

CREATE USER MAPPING FOR oracle_fdw1 SERVER oradb

OPTIONS (user SCOTT', password ‘TIGER');

user:远程数据库用户

password:用户密码

8、创建FDW表(以oracle_fdw1用户创建)

CREATE FOREIGN TABLE emp_fdw (

EMPNO int ,

ENAME VARCHAR(10),

JOB VARCHAR(9),

MGR int,

HIREDATE date,

SAL float4,

COMM float4,

DEPTNO int

) SERVER oradb OPTIONS (schema 'SCOTT', table 'EMP');

Schema_name:必须大写,因为Oracle数据字典中默认是大写

Table_name:需要访问的表表名

9、创建FDW表(以oracle_fdw1用户创建)

CREATE FOREIGN TABLE dept_fdw (

deptno integer,

dname character varying(14),

loc character varying(13)

)SERVER oradb OPTIONS (schema 'SCOTT', table 'DEPT');

Schema_name:public,特定schema用户创建的表,则写该schema名字

Table_name:需要访问的表表名

10、访问FDW表(以oracle_fdw1用户访问)

SELECT * FROM emp_fdw;

SELECT * FROM dept_fdw;

*访问FDW表的语法与访问本地表一样。



FDW原理

FDW执行流程

FDW执行流程

1、Creating a Query Tree(访问pg_catalog.pg_class和pg_catalog.pg_foreign_table)

2、Connecting to the Remote Server(使用libpq库)

3、Creating a Plan Tree Using EXPLAIN Commands (Optional)(访问pg_catalog.pg_user_mapping和pg_catalog.pg_foreign_server)

4、Deparesing(postgres_fdw从通过解析和分析创建的查询树中重新创建一个纯文本文件,在PostgreSQL中称为deparsing。)

5、Sending SQL Statements and Receiving Result


各个版本功能演进


执行DML操作(PG-Oracle不支持DML操作)

多表查询

Version 9.6以前版本

localdb=# EXPLAIN SELECT * FROM tbl_a AS a, tbl_b AS b WHERE a.id = b.id AND a.id < 200;

QUERY PLAN

------------------------------------------------------------------------------

Merge Join (cost=532.31..700.34 rows=10918 width=16)

Merge Cond: (a.id = b.id)

-> Sort (cost=200.59..202.72 rows=853 width=8)

Sort Key: a.id

-> Foreign Scan on tbl_a a (cost=100.00..159.06 rows=853 width=8)

-> Sort (cost=331.72..338.12 rows=2560 width=8)

Sort Key: b.id

-> Foreign Scan on tbl_b b (cost=100.00..186.80 rows=2560 width=8)

(8 rows)

多表查询

(PG-PG)如果使用ALTER SERVER命令将use_remote_estimate选项设置为on,则计划器将通过执行EXPLAIN命令向远程服务器查询计划的成本,此时连接操作在远程进行,提高性能。

ALTER SERVER pgdb OPTIONS (use_remote_estimate 'on');

\des+

localdb=# EXPLAIN SELECT * FROM tbl_a AS a, tbl_b AS b WHERE a.id = b.id AND a.id < 200;

QUERY PLAN

-----------------------------------------------------------

Foreign Scan (cost=134.35..244.45 rows=80 width=16)

Relations: (public.tbl_a a) INNER JOIN (public.tbl_b b)

(2 rows)

排序操作

在9.5或更早版本中:

localdb=# EXPLAIN SELECT * FROM tbl_a AS a WHERE a.id < 200 ORDER BY a.id;

QUERY PLAN

-----------------------------------------------------------------------

Sort (cost=200.59..202.72 rows=853 width=8)

Sort Key: id

-> Foreign Scan on tbl_a a (cost=100.00..159.06 rows=853 width=8)

(3 rows)

排序操作

在9.6或以后版本中:

localdb=# EXPLAIN SELECT * FROM tbl_a AS a WHERE a.id < 200 ORDER BY a.id;

QUERY PLAN

-----------------------------------------------------------------

Foreign Scan on tbl_a a (cost=100.00..167.46 rows=853 width=8)

(1 row)

聚组函数操作

在9.6或更早版本中:

localdb=# EXPLAIN SELECT AVG(data) FROM tbl_a AS a WHERE a.id < 200;

QUERY PLAN

-----------------------------------------------------------------------

Aggregate (cost=168.50..168.51 rows=1 width=4)

-> Foreign Scan on tbl_a a (cost=100.00..166.06 rows=975 width=4)

(2 rows)

聚组函数操作

在10或以后版本中:

localdb=# EXPLAIN SELECT AVG(data) FROM tbl_a AS a WHERE a.id < 200;

QUERY PLAN

-----------------------------------------------------

Foreign Scan (cost=102.44..149.03 rows=1 width=32)

Relations: Aggregate on (public.tbl_a a)

(2 rows)


以上就是【PostgreSQL从小白到专家】第27讲 - Oracle-FDW部署  的内容,欢迎一起探讨交流钉钉交流群:35,82,24,60,往期视频及文档内容联系CUUG

  • OCP认证能不能在家中考试,不去VUE考点考试吗?
  • 恭喜CUUG Guo同学以较高分数通过19c OCM认证考试!
  • Oracle数据库加入AI功能,Database 23c改名为Database 23ai
  • PostgreSQL技术大讲堂 - 第56讲:老陈与德哥聊“数据库孤儿文件”
  • PostgreSQL技术大讲堂 - 第57讲:老陈与德哥聊“数据库安全”
  • 7月8日,恭喜CUUG 张同学通过19c OCM认证考试,成绩公布!
  • Oracle OCP证书还有用吗 含金量有多高
  • 腾讯云认证级别名称TCA、TCP、TCE升级为TCCA、TCCP、TCCE
  • 怎么报考腾讯云TDSQL数据库工程师认证(TCCA、TCCP、TCCE)
  • OCP认证没有含金量了?来看看Oracle OCP 证书的用处!
  • Oracle OCM证书还值得考吗?哪些人需要考OCM
  • Oracle 数据库认证,数据库领域的金字招牌
  • PostgreSQL技术大讲堂 - 第46讲:poc-tpch测试
  • PostgreSQL技术大讲堂 - 第47讲:JMETER工具使用
  • PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived
  • 3月30日,工信部人才交流中心PostgreSQL认证考试顺利结束
  • 2024年4月8日,工信人才发布红头文件:PostgreSQL数据库管理人才研修与评测班
  • 恭喜CUUG入选2024年工业和信息化重点领域人才能力评价支撑机构
  • 天津职业技术师范大学《PolarDB开源数据库工作室》授牌仪式顺利完成
  • 温州大学国产开源数据库工作室成功举办PostgreSQL技能培训活动
  • 2024-02-02,恭喜CUUG 刘同学通过Oracle考试获得OCP 19c证书
  • 5月16日,开源驱动教育创新研讨会(青岛站)成功举办-CUUG
  • Oracle OCP认证还值得考吗 考OCP证书需要门槛吗
  • 今天(5月6日),CUUG 赵同学收到19c OCM认证考试证书!
  • 5月17日,PolarDB开源数据库沙龙(青岛站)成功举办-CUUG
  • PostgreSQL技术大讲堂 - 第51讲:老陈与德哥聊一聊数据库调优
  • 5月25日,温州大学49名学生参加工信人才PostgreSQL认证考试!
  • 5月30日,PG中级证书来了!工信人才PostgreSQL管理员认证证书!
  • 6月1日,汇华学院12名学生参加工信人才PostgreSQL认证考试!
  • PG技术大讲堂 - 第55讲:通义大模型+向量数据库实现AI的外脑
  • PostgreSQL技术大讲堂 - 第53讲:老陈与德哥开讲PostgreSQL 17新特性
  • PostgreSQL技术大讲堂 - 第54讲:如何在上线前精准评估PG SQL性能
  • 有大奖!第13届PostgreSQL中国技术大会:聚焦云端创新,汇聚智慧共享
  • PolarDB开源社区走进金蝶,开源数据库沙龙成功举办!
  • 阿里云PolarDB再获顶会SIGMOD最佳论文奖
  • 阿里云斩获国际数据库顶会ICDE 2024最佳论文
  • 腾讯云数据库TDSQL荣获深圳市科技进步奖一等奖
  • oracle ocp证书有效期多长时间
  • PostgreSQL技术大讲堂 - 第52讲:与德哥背后的男人们聊如何实现自动性能调优
  • PostgreSQL技术大讲堂 - 第58讲:老陈与德哥聊“txid从32位变成64位的影响与调整”
  • 报名啦!第13届PostgreSQL中国技术大会,”聚焦云端创新 汇聚智慧共享“
  • 汇华学院PG证书来了!工信人才&CUUG PostgreSQL管理员认证!
  • 温州大学PG证书来了!工信人才PostgreSQL管理员认证证书!
  • PostgreSQL PG夜话(第20期):数据库老陈、德哥、快立方华总,聊一聊数据库内存管理
  • PostgreSQL从入门到精通教程,这样学习postgres
  • PostgreSQL数据库,为什么会异军突起?
  • PostgreSQL中国技术大会 CUUG获得PostgreSQL数据库认证与培训合作伙伴
  • 不懂就问:什么是PostgreSQL数据库管理员认证
  • 是时候解锁一下“PostgreSQL数据库认证专家”了
  • ocm认证考试费用多少钱,Oracle OCM考几科