接上篇:https://developer.aliyun.com/article/1223103?spm=a2c6h.13148508.setting.16.44ec4f0eNvAByn
上图为FDW9.5之前做外部连接的流程,代价较大。
上图为FDW9.5后的外部链接流程,打开use_remote_estimate后,连接在远程完成,极大提高了查询性能。
在9.5版本之前,排序也需要从远程将数据传到本地,然后在本地做sort操作。
而9.5之后的版本中,排序操作被下推到远程服务器,排序完成后将结果返回至本地即可。
聚合操作同理。在10版本之后,本地不再做聚合,而是由远程服务器来完成。
综上,新版本的FDW性能得到了较大的提高。
部署演示
Postgres_FDW部署
首先,添加扩展,安装外界PolarDB扩展。创建server并为其命名,传入远程PolarDB名、服务端口以及要访问的数据库名,用于连接远程服务器。远程服务器上应配置好权限,即允许哪台客户端访问服务器。
通过\des命令可查看当前有哪些外部服务器以及对应的主机信息,如上图所示。
注意,因为PolarDB由很多数据库组成,在create FDW时,在哪个数据库上部署FDW,则FDW只能在该数据库上使用。
创建用户并为其授权,使其有权创建外部表,然后创建用户映射。
有了用户映射后,比如远程服务器是postgres用户,本地的scott用户也可对其进行访问,即能够以不同的用户来访问不同表的数据。
创建外部表,创建时后面需要跟上外部的服务器、schema以及远程表的名字。
通过\d查询,当前scott_pg用户下有dept_fdw和emp_fdw两个外部表,访问外部表与访问本地表没有任何区别。
可以通过\ds+emp_fdw查看该表,结果会显示它为外部表以及它的访问模式、远程服务器等信息。
File_FDW部署
首先,添加扩展,创建本地插件,创建基于本地FDW的server,将权限赋予相应的用户。
创建外部表。因为需要引用本地某文本文件里的数据,因此后面需指定file name即数据源路径,并指定格式为CSV,代表用逗号隔开列与列之间的数据。
创建成功后,查看该表。
/home/postgres/emp2.csv文件的产生有两种方式:
• 其一,如果是外部的文本文件,采集时将列与列之间用逗号隔开即可。
• 其二,如果是自己创建的外部表,通过上图语句将emp的内容进行复制即可。
最终,用户可以像访问内部表一样访问外部表,非常方便。此外,基于文件的外部表为只读,不能做DML操作。