在our previous article中,我们在PostgreSQL中讨论了外国数据包装器(FDW),以及它们如何使PostgreSQL与其他数据源进行交互。我们还介绍了Postgres_fdw扩展名,该扩展名是由PostgreSQL Global Development Group维护的模块,允许用户在PostgreSQL中为远程数据源创建外国表。
在本文中,我们将深入研究Postgres_fdw扩展名及其在PostgreSQL 4.1.2中的性能功能。我们将介绍与Postgres_fdw有关的发行说明及其如何处理多桌子查询,分类操作和汇总功能。此外,我们将讨论Postgres_fdw如何处理其他数据操纵语言(DML)语句,包括插入,更新和删除。
发行说明与postgres_fdw有关
Postgres_fdw多年来经历了许多更新。表显示了与Postgres_fdw有关的发行说明,如官方文档所述:
处理多桌查询,分类操作和汇总功能
postgres_fdw可以通过使用单台select语句获取每个外国表,然后在本地服务器上加入它们。
在9.5版或更早版本中,即使外国表存储在同一远程服务器上,Postgres_fdw也会单独获取它们并加入它们。但是,在版本9.6或更晚的版本中,Postgres_fdw已改进,以在同一服务器上的外桌上执行远程连接服务器上的远程加入操作,并且use_remote_estimate选项已打开。
。让我们考虑如何处理以下查询,以加入两个外国表TBL_A和TBL_B:
select *从tbl_a as a,tbl_b为b,其中a.id = b.id and a.id <200;
查询的解释命令的结果表明,执行人选择合并加入,并作为以下步骤处理:
合并加入(成本= 532.31..700.34行= 10918宽度= 16)
合并cond :( a.id = b.id)
- >排序(成本= 200.59..202.72行= 853宽度= 8)
排序键:a.id
- >在tbl_a a上进行外扫描(成本= 100.00..159.06行= 853宽度= 8)
- >排序(成本= 331.72..338.12行= 2560宽度= 8)
排序键:B.ID
- >对TBL_B B上的外扫描(成本= 100.00..186.80行= 2560宽度= 8)
上面的结果表明,执行者使用外国表扫描获取表TBL_A,并在执行合并加入操作之前对本地服务器上的行进行分组。然后,执行人使用外国表扫描来获取TBL_B的行,然后在本地服务器上对其进行分组,然后再继续使用合并JOIN操作。最后,作为查询的输出,合并加入操作的结果将返回。
的输出。排序操作
查询涉及对结果集进行排序时,如果可能的话,Postgres_fdw可以在远程服务器上执行排序操作,从而减少需要传输到本地服务器的数据量。但是,这取决于计划者的决定,该决定考虑了传输数据的成本与远程执行排序操作的成本。
聚合功能
postgres_fdw也可以将汇总功能推向远程服务器。这意味着远程服务器将执行聚合操作并将聚合结果设置返回到本地服务器。但是,并非所有汇总功能都可以将其推向远程服务器,并且计划者将根据传输数据的成本与执行聚合操作的成本的成本进行决定。
结论
postgres_fdw是一种强大的工具,允许PostgreSQL与存储在远程服务器上的数据一起工作。 Postgres_fdw扩展已在最近的版本中逐渐改进,从而使其可以在远程服务器上执行更多操作,例如加入,分类和聚合功能。但是,重要的是要注意,Postgres_FDW和FDW功能不支持分布式锁定管理器和分布式僵局检测功能,这意味着在某些情况下可能发生僵局。尽管如此,Postgres_fdw仍然是使用PostgreSQL中的远程数据源的宝贵工具。