13.1.?uxdb_fdw的FDW选项

13.1.1. 连接选项
13.1.2. 对象名称选项
13.1.3. 代价估计选项
13.1.4. 远程执行选项
13.1.5. 可更新性选项
13.1.6. 导入选项

13.1.1.?连接选项

一个使用uxdb_fdw外部数据封装器的外部服务器可以使用libpq在连接字符串中能接受的选项,不过不允许这些选项:

  • user和password(在用户映射中指定)。

  • client_encoding(自动从本地服务器编码设置)。

  • fallback_application_name(总是设置为uxdb_fdw) 。

只有超级用户可以在不经过口令认证的情况下连接到外部服务器,因此应为属于非超级用户的用户映射指定password选项。

13.1.2.?对象名称选项

对象名称选项控制被发送到远程UXDB服务器的SQL语句中使用的名称。当一个外部表被使用不同于底层远程表的名称创建时,就需要这些选项。

schema_name

这个选项给出用在远程服务器之上的外部表的模式名称,可以为一个外部表指定该选项。如果这个选项被忽略,该外部表的模式名称将被使用。

table_name

这个选项给出用在远程服务器上的外部表表名,可以为一个外部表指定该选项。如果这个选项被忽略,该外部表的名称将被使用。

column_name

这个选项给出用在远程服务器上列的列名,可以为一个外部表指定该选项。如果这个选项被忽略,该列的名称将被使用。

13.1.3.?代价估计选项

uxdb_fdw通过在远程服务器上执行查询来检索远程数据,因此理想的扫描一个外部表的估计代价应该是在远程服务器上完成它的花销,外加一些通信开销。得到这样一个估计的最可靠的方法是询问远程服务器并加上一些通信开销 — 但是对于简单查询,不值得为获得一个代价估计而额外使用一次远程查询。因此uxdb_fdw提供了下列选项来控制如何完成代价估计:

use_remote_estimate

这个选项控制uxdb_fdw是否发出EXPLAIN命令来获得代价估计,可以为一个外部表或一个外部服务器指定该选项。外部表的设置会覆盖它的服务器的任何设置,但是只用于这个表。默认值是false。

fdw_startup_cost

这个选项是要被添加到服务器上任何外部表扫描的估计启动代价的数值,可以为一个外部服务器指定该选项。这表示建立远端连接、解析和规划查询等额外负荷。默认值是100。

fdw_tuple_cost

这个选项是被用作服务器上外部表扫描的每个元组额外代价的一个数值,可以为一个外部服务器指定该选项。这表示在服务器之间数据传输的额外负荷。可以增加或减少这个数来反映到远程服务器更高或更低的网络延迟。默认值是0.01。

当use_remote_estimate为真时,uxdb_fdw从远程服务器获得行计数和代价估计,然后在代价估计上加上fdw_startup_cost和fdw_tuple_cost。

当use_remote_estimate为假时,uxdb_fdw执行本地行计数和代价估计,并且接着在代价估计上加上fdw_startup_cost 和fdw_tuple_cost。这种本地估计不会很准确,除非有远程表统计数据的本地拷贝可用。在外部表上运行ANALYZE是更新本地统计数据的方法,这将执行远程表的一次扫描并接着计算和存储统计数据,就好像表在本地一样。保留本地统计数据可能是一种有用的方法来减少一个远程表的预查询规划负荷 — 但是如果远程表被频繁更新,本地统计数据将很快就被废弃。

13.1.4.?远程执行选项

默认情况下,只有使用了内建操作符和函数的WHERE子句才会被考虑在远程服务器上执行。涉及非内建函数的WHERE子句将会在取完行后在本地进行检查。如果这类函数在远程服务器上可用并且可以用来产生和本地执行时一样的结果,则可以通过将这种WHERE子句发送到远程执行来提高性能。可以用下面的选项控制这种行为:

extensions

这个选项是一个用逗号分隔的已安装的UXDB扩展名称列表,这些扩展在本地和远程服务器上具有兼容的版本。属于该列表中扩展的不可变函数和操作符将被考虑转移到远程服务器上执行。这个选项只能由外部服务器指定,无法逐个表指定。

在使用extensions选项时,用户应该负责确保列出的扩展在本地和远程服务器上都存在且保持一致。否则,远程查询可能失败或者行为异常。

fetch_size

这个选项指定在每次获取行的操作中uxdb_fdw应该得到的行数。可以为一个外部表或一个外部服务器指定该选项。在表上指定的选项将会覆盖在服务器级别上指定的选项。默认值为100。

13.1.5.?可更新性选项

默认情况下,所有使用uxdb_fdw的外部表都被假定是可更新的。可以使用以下选项覆盖此选项:

updatable

这个选项控制uxdb_fdw是否允许外部表被使用INSERT、UPDATE和DELETE命令更新。可以为一个外部表或一个外部服务器指定该选项。一个表级选项会覆盖一个服务器级选项。默认值是true。

当然,如果远程表实际上并非可更新的,将产生一个错误。这个选项的使用主要是允许在不查询远程服务器的情况下在本地抛出错误。但是要注意information_schema视图根据这个选项的设置报告uxdb_fdw外部表是可更新的(或者不可更新的),而不经过远程服务器的任何检查。

13.1.6.?导入选项

uxdb_fdw能使用IMPORT FOREIGN SCHEMA导入外部表定义。这个命令会在本地服务器上创建外部表定义,这个定义能匹配存在于远程服务器上的表或者视图。如果要被导入的远程表有用户自定义数据类型的列,本地服务器上也必须具有相同名称的兼容类型。

导入行为可以用下列选项自定义(在IMPORT FOREIGN SCHEMA命令中给出):

import_collate

这个选项控制是否在从外部服务器导入的外部表定义中包括列的COLLATE选项。默认是true。如果远程服务器具有和本地服务器不同的排序规则名集合,可能需要关闭这个选项,在不同的操作系统上运行时很可能就是这样。

import_default

这个选项控制是否在从外部服务器导入的外部表定义中包括列的DEFAULT表达式。默认是false。如果启用这个选项,要当心在远程服务器和本地服务器上计算表达式的方式不同,nextval()常会导致这类问题。如果导入的默认值表达式使用了一个本地不存在的函数或者操作符,IMPORT将整个失败。

import_not_null

这个选项控制是否在从外部服务器导入的外部表定义中包括列的NOT NULL约束。默认是true。

注意

除NOT NULL之外的约束将不会从远程表中导入。虽然UXDB确实支持外部表上的CHECK约束,但不会自动导入它们,因为约束表达式在本地和远程服务器上的计算可能会不同。CHECK约束中的任何这类不一致都可能导致查询优化中很难检测的错误。因此,如果希望导入CHECK约束,必须手工完成,并且应仔细验证每一个这种约束的语义。

自动排除作为其他表的分区的表或外部表。分区表的父表被导入,除非它们是其他表的分区。 由于所有数据都可以通过作为分区层次根的分区表来访问,所以这种方法应该允许访问所有数据而不创建额外的对象。

XML 地图 | Sitemap 地图