=========================== CREATE FOREIGN DATA WRAPPER =========================== .. container:: refentry :name: SQL-CREATEFOREIGNDATAWRAPPER .. container:: titlepage .. container:: refnamediv .. rubric:: CREATE FOREIGN DATA WRAPPER :name: create-foreign-data-wrapper CREATE FOREIGN DATA WRAPPER — 定义一个新的外部数据包装器 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis CREATE FOREIGN DATA WRAPPER name [ HANDLER handler_function | NO HANDLER ] [ VALIDATOR validator_function | NO VALIDATOR ] [ OPTIONS ( option 'value' [, ... ] ) ] .. container:: refsect1 :name: id-1.9.3.65.5 .. rubric:: 描述 :name: 描述 ``CREATE FOREIGN DATA WRAPPER``\ 创建一个 新的外部数据包装器。定义外部数据包装器的用户将成为它的拥有者。 在数据库内外部数据包装器名称必须唯一。 只有超级用户能够创建外部数据包装器。 .. container:: refsect1 :name: id-1.9.3.65.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist *``name``* 要创建的外部数据包装器的名称。 ``HANDLER handler_function`` *``handler_function``*\ 是一个以前注册 好的函数的名称,它将被调用来为外部表检索执行函数。处理器函数必 须不能有参数,并且它的返回类型必须是\ ``fdw_handler``\ 。 可以创建一个没有处理器函数的外部数据包装器,但是使用这个包装 器的外部表只能被声明,但不能被访问。 ``VALIDATOR validator_function`` *``validator_function``* 是一个之前已注册的函数的名称,它将被调用来检查给予该外部数据包装器 的选项,还有用于外部服务器、用户映射以及使用 该外部数据包装器的外部表的选项。如果没有验证器函数或者指定了 ``NO VALIDATOR``\ ,那么在创建时不会检查选项( 外部数据包装器可能会在运行时忽略或者拒绝无效的选项说明,这取决于 实现)。验证器函数必须接受两个参数:一个类型是\ ``text[]``\ , 它将包含存储在系统目录中的选项数组,另一个是类型 ``oid``\ ,它将是包含该选项的系统目录的 OID。返回类型 会被忽略,该函数应该使用\ ``ereport(ERROR)`` 函数报告无效选项。 ``OPTIONS ( option`` '*``value``*' [, ... ] ) 这个子句为新的外部数据包装器指定选项。允许的选项名称和值与每一个 外部数据包装器有关,并且它们会被该外部数据包装器的验证器函数验证。 选项名称必须唯一。 .. container:: refsect1 :name: id-1.9.3.65.7 .. rubric:: 注解 :name: 注解 PostgreSQL的外部数据功能仍在积极的开发中。 查询的优化还很原始(也是剩下工作最多的部分)。因此,未来还有很 可观的性能提升空间。 .. container:: refsect1 :name: id-1.9.3.65.8 .. rubric:: 示例 :name: 示例 创建一个无用的外部数据包装器\ ``dummy``\ : .. code:: programlisting CREATE FOREIGN DATA WRAPPER dummy; 用处理器函数\ ``file_fdw_handler``\ 创建一个外部数据包装器 ``file``\ : .. code:: programlisting CREATE FOREIGN DATA WRAPPER file HANDLER file_fdw_handler; 用一些选项创建一个外部数据包装器\ ``mywrapper``\ : .. code:: programlisting CREATE FOREIGN DATA WRAPPER mywrapper OPTIONS (debug 'true'); .. container:: refsect1 :name: id-1.9.3.65.9 .. rubric:: 兼容性 :name: 兼容性 ``CREATE FOREIGN DATA WRAPPER`` 符合 ISO/IEC 9075-9 (SQL/MED),不过\ ``HANDLER`` 和\ ``VALIDATOR``\ 子句是扩展,并且标准子句 ``LIBRARY``\ 和\ ``LANGUAGE``\ 还没有 在PostgreSQL中被实现。 不过要注意,整体上来说 SQL/MED 功能还没有符合。 .. container:: refsect1 :name: id-1.9.3.65.10 .. rubric:: 另见 :name: 另见 `ALTER FOREIGN DATA WRAPPER `__, `DROP FOREIGN DATA WRAPPER `__, `CREATE SERVER `__, `CREATE USER MAPPING `__, `CREATE FOREIGN TABLE `__