当前位置: fuhua-pet->优技培训 > PostgreSQL技术大讲堂 - 第26讲:PG-FDW部署

PostgreSQL技术大讲堂 - 第26讲:PG-FDW部署

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

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


第26讲:PG-FDW部署


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

内容2 : Postgres_FDW部署

内容3 : FDW执行原理

内容4 : 本地外部表操作


Foreign Data Wrappers

Foreign Data Wrappers (FDW)




FDW部署

部署FDW(在客户端部署)

1、编译postgres_fdw

cd /soft/postgresql-12.2/contrib/postgres_fdw

make

make install

2、安装postgres_fdw (哪个database上使用,就在哪个database上安装)

create extension postgres_fdw;

3、创建fdw服务器

CREATE SERVER pgdb FOREIGN DATA WRAPPER postgres_fdw

OPTIONS (host 'pg2',port '1922',dbname 'testdb');

Host:远程主机名、ip地址

Port:远程数据库监听端口

Dbname:远程服务器名字

4、授权

GRANT USAGE ON FOREIGN SERVER pgdb TO pg_fdw1;

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

CREATE USER MAPPING FOR pg_fdw1 SERVER pgdb

OPTIONS (user 'scott', password 'tiger');

user:远程数据库用户

password:用户密码

6、创建FDW表(以pg_fdw1用户创建)

GRANT USAGE ON FOREIGN SERVER pgdb TO scott_pg;

6、创建FDW表(以pg_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 pgdb OPTIONS (schema_name 'public', table_name 'emp');

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

Table_name:需要访问的表表名

7、创建FDW表(以pg_fdw1用户创建)

CREATE FOREIGN TABLE dept_fdw (

deptno integer,

dname character varying(14),

loc character varying(13)

)SERVER pgdb OPTIONS (schema_name ‘public', table_name 'dept');;

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

Table_name:需要访问的表表名

8、访问FDW表(以pg_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

FDW执行流程(PG-PG)

在远程服务器端打开日志,可以查看到访问流程:

log_destination = 'csvlog'

logging_collector = on

log_directory = 'pg_log

log_filename = 'postgresql-%Y-%m-%d'

log_truncate_on_rotation = off

log_rotation_age = 1d

log_rotation_size = 0

log_error_verbosity = verbose

log_statement = all


各个版本功能演进

执行DML操作(PG-PG支持DML操作,其它不支持)

PostgreSQL_FDW不会检测死锁

localdb=# -- Client A

localdb=# BEGIN;

BEGIN

localdb=# UPDATE tbl_local SET data = 0 WHERE id = 1;

UPDATE 1

localdb=# UPDATE tbl_remote SET data = 0 WHERE id = 1;

UPDATE 1


localdb=# -- Client B

localdb=# BEGIN;

BEGIN

localdb=# UPDATE tbl_remote SET data = 0 WHERE id = 1;

UPDATE 1

localdb=# UPDATE tbl_local SET data = 0 WHERE id = 1;

UPDATE 1

多表查询

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)


本地外部表

本地外部表

1、--添加扩展

CREATE EXTENSION file_fdw;

2、--创建SERVER FOR file

create server pg_file_server foreign data wrapper file_fdw;

3、--创建外部表,与外部文件结构一致

create foreign table emp_file_fdw

(EMPNO int,

ENAME varchar(10),

JOB varchar(9),

MGR int,

HIREDATE DATE,

SAL int,

COMM int,

DEPTNO int)

server pg_file_server

options(filename '/home/postgres/emp.csv',format 'csv',header 'true',delimiter ',');

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

  • PostgreSQL技术大讲堂 - 第63讲:duckdb数据库盛宴
  • 金蝶集团信创PostgreSQL数据库认证开班啦!!!
  • PostgreSQL技术大讲堂 - 第64讲:给pg插上翅膀-pg_quack
  • 如何考取PostgreSQL认证证书?
  • 有序推进合作互补,共建PostgreSQL良好生态环境
  • 【优技教育】Oracle 19c OCP 082认证考试题库(第5题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第1题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第3题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第8题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第13题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第14题)- 2024年修正版
  • Oracle 19c OCP 082认证考试题库(第6题)- 2024年修正版
  • Oracle 19c OCP 082认证考试题库(第7题)- 2024年修正版
  • 8月26日,恭喜CUUG 肖同学获得19c OCM证书!
  • 报名啦!PolarDB数据库创新设计赛(天池杯)等你来战
  • 相约华中科技大学,移动云技术论坛 第四期:打造数智时代新型数据底座
  • 【优技教育】Oracle 19c OCP 082题库(第16题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第18题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第19题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第20题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第22题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第23题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第24题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第26题)- 2025年修正版
  • 单考一个OCP认证?还是OCP和OCM认证都拿到手?
  • 考前须知:Oracle OCP考试流程和准备
  • 你还在犹豫要不要考个OCP认证吗
  • “多图警告” - 带你快速浏览2024杭州云栖现场
  • 汇集众多AI硬科技 9月19日 阿里云栖大会即将到来
  • 腾讯云TDSQL数据库认证值得考吗?来看看TDSQL证书有什么用
  • 9月28日,工信部人才交流中心&CUUG-PGCA+PGCP+PGCM认证考试完成!
  • 河北建筑工程学院 - 国产数据库工作室揭牌 & 天池杯数据库大赛
  • 浙江大学开源技术交流,PolarDB数据库创新设计赛(天池杯)等你来战
  • 中国人民大学举办PolarDB数据库创新设计赛(天池杯)交流会,大赛技术指导陈卫星老师现场答疑
  • 33条必看问题!腾讯云认证考试须知!
  • AI4DB系列公开课--让AI生成SQL语句
  • PolarDB开源社区荣获2024 OSCAR尖峰开源项目及开源社区奖
  • PostgreSQL数据库技术沙龙福州站圆满结束!
  • 恭喜CUUG多位同学获得PGCP中级-PGCM高级证书
  • PostgreSQL技术大讲堂 - 第65讲:pg与Oracle的绑定变量窥视对比
  • PostgreSQL技术大讲堂 - 第66讲:PG数据库参数调整
  • 信创领域认证,来自工信部人才交流中心的PostgreSQL培训班
  • 备考Oracle OCP 19c认证,这篇内容你需要了解
  • 深入了解Oracle OCP认证,开启数据库专业之旅
  • 数据库认证有用吗?证书:职场晋升的有力助推器
  • PG17版本来了!PostgreSQL全球开发组宣布PostgreSQL 17发布!
  • PostgreSQL技术大讲堂 - 第67讲:PG完全恢复与不完全恢复一网打尽
  • 为什么要考工信部人才交流中心PostgreSQL认证
  • 象形闽都 数智榕城 - PostgreSQL中文社区技术沙龙 - 福州站
  • 有一种能力认证,叫做工信人才PostgreSQL认证