在PostgreSQL中,随着版本9.1以来,通过开发SQL的外部数据管理(SQL/MED),已使访问远程数据成为可能。外国数据包装器(FDW)使用SQL/MED来管理类似于本地表的外国表。此功能允许从本地服务器访问外国表,并使用存储在不同服务器上的外国表执行联接操作。 PostgreSQL已开发了许多FDW扩展,包括官方开发和维护的扩展名Postgres_fdw,用于访问远程PostgreSQL服务器。
本文讨论了Postgresql 4.1内部的第四章,该章节详细解释了FDW在Postgresql中的工作。
PostgreSQL中FDW的概述
要使用FDW功能,需要安装适当的扩展名并执行设置命令,例如Create freate Exourth表,创建服务器和创建用户映射。设置后,在查询处理过程中调用扩展程序中定义的功能以访问外国表。
使用分析仪/分析仪使用pg_catalog.pg_class和pg_catalog.pg_foreign_table目录中存储的外国表的定义来创建输入SQL的查询树。 To connect to the remote server, the planner (or executor) uses a specific library to connect to the remote database server, with connection parameters such as the username, server's IP address, and port number stored in the pg_catalog.pg_user_mapping and pg_catalog.pg_foreign_server使用创建用户映射和创建服务器命令的目录。
使用解释命令(可选)创建计划树
PostgreSQL的FDW支持获得外国表的统计数据,以估算查询的计划树。一些FDW扩展,例如Postgres_fdw,MySQL_FDW,TDS_FDW和JDBC2_FDW,请使用此功能。如果使用Alter Server命令设置了USE_REMOTE_ESTIMATE选项,则计划器通过执行dumply命令来查询远程服务器的计划成本。否则,默认情况下使用嵌入式常数值。
创建一个查询树
查询树是由分析仪/分析仪使用创建外部表或导入外国架构命令创建的,该命令定义了存储在pg_catalog.pg_class和pg_catalog.pg_foreign_table目录中的外国表格。
连接到远程服务器
计划者(或执行程序)使用特定的库连接到远程数据库服务器,例如libpq,以连接到远程Postgresql Server和libmysqlclient,以连接到MySQL Server。连接参数(例如用户名,服务器的IP地址和端口号)存储在pg_catalog.pg_user_mapping和pg_catalog.pg_foreign_server目录中。
贬低
为了生成计划树,计划者从计划树的扫描路径中创建了纯文本SQL语句。纯文本SQL语句将发送到远程服务器,执行程序将接收结果并在必要时处理接收的数据。例如,如果执行了多桌查询,则执行程序执行接收到的数据和其他表的加入处理。
结论
PostgreSQL中的外国数据包装器是一项有用的功能,允许从本地服务器访问远程表并使用存储在不同服务器上的外国表执行联接操作。了解FDW的工作对于优化查询的性能至关重要。正式开发和维护的扩展名Postgres_fdw是最可靠,最维护的FDW扩展。