SQL COMMAND · 外部数据
CREATE FOREIGN DATA WRAPPER
定义一个新的外部数据包装器
CREATE外部数据引入 10(基线)现存至 20 devel1 次语法变更
- 动词
CREATE- 对象
FOREIGN DATA WRAPPER- 分组
- 外部数据
- 引入版本
- 10(基线)
- 状态
- 现存
- 语法变更次数
- 1
- 手册小节数
- 6
版本轨迹
相对 PostgreSQL 17 无变化。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
语法概要
CREATE FOREIGN DATA WRAPPERname[ HANDLERhandler_function| NO HANDLER ] [ VALIDATORvalidator_function| NO VALIDATOR ] [ OPTIONS (option'value' [, ... ] ) ]
描述
CREATE FOREIGN DATA WRAPPER创建一个新的外部数据包装器。 定义该外部数据包装器的用户将成为它的拥有者。
外部数据包装器名称在数据库内必须唯一。
只有超级用户能够创建外部数据包装器。
参数
name要创建的外部数据包装器的名称。
HANDLERhandler_functionhandler_function是一个预先注册的函数的名称,该函数将被调用以取得外部表所需的执行函数。 该处理器函数不能接受任何参数,并且其返回类型必须是fdw_handler。可以创建没有处理器函数的外部数据包装器,但使用这种包装器的外部表 只能被声明,不能被访问。
VALIDATORvalidator_functionvalidator_function是一个预先注册的函数的名称,该函数将被调用以检查提供给该外部数据 包装器的通用选项,以及用于外部服务器、用户映射和使用该外部数据包装器 的外部表的选项。如果未指定验证器函数或者指定了NO VALIDATOR,则在创建时不会检查这些选项。 (外部数据包装器可能会在运行时忽略无效的选项声明,或者拒绝它们, 这取决于其实现。)验证器函数必须接受两个参数:一个参数的类型为text[],其中包含系统目录中存储的选项数组;另一个参数的 类型为oid,其值是包含这些选项的系统目录 的 OID。返回类型会被忽略;该函数应当使用ereport(ERROR)报告无效选项。OPTIONS (option'value' [, ... ] )这个子句为新的外部数据包装器指定选项。允许的选项名和值都依赖于 各个外部数据包装器,并通过该外部数据包装器的验证器函数进行验证。 选项名必须唯一。
注解
PostgreSQL的外部数据功能仍在积极开发中。 查询优化能力还很初级,而且这项工作在很大程度上也留给了包装器本身。 因此,未来在性能方面仍有相当大的改进空间。
示例
创建一个无用的外部数据包装器dummy:
CREATE FOREIGN DATA WRAPPER dummy;
用处理器函数file_fdw_handler创建一个外部数据包装器 file:
CREATE FOREIGN DATA WRAPPER file HANDLER file_fdw_handler;
用一些选项创建一个外部数据包装器mywrapper:
CREATE FOREIGN DATA WRAPPER mywrapper
OPTIONS (debug 'true');
兼容性
CREATE FOREIGN DATA WRAPPER符合 ISO/IEC 9075-9 (SQL/MED),但HANDLER和 VALIDATOR子句属于扩展,而标准中的 LIBRARY和LANGUAGE子句 在PostgreSQL中尚未实现。
不过需要注意,SQL/MED 功能整体上尚未完全符合该标准。
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 19← 18语法变化
+ [ CONNECTION connection_function | NO CONNECTION ]正文更新
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
CREATE FOREIGN DATA WRAPPER | CREATE | FOREIGN DATA WRAPPER | 191 次 | |
| 定义一个新的外部数据包装器 | 现存 | |||
ALTER FOREIGN DATA WRAPPER | ALTER | FOREIGN DATA WRAPPER | 192 次 | |
| 更改外部数据包装器的定义 | 现存 | |||
DROP FOREIGN DATA WRAPPER | DROP | FOREIGN DATA WRAPPER | — | |
| 移除一个外部数据包装器 | 现存 | |||
IMPORT FOREIGN SCHEMA | IMPORT | FOREIGN SCHEMA | — | |
| 从一个外部服务器导入表定义 | 现存 | |||
CREATE FOREIGN TABLE | CREATE | FOREIGN TABLE | 143 次 | |
| 定义一个新外部表 | 现存 | |||
ALTER FOREIGN TABLE | ALTER | FOREIGN TABLE | 142 次 | |
| 更改外部表的定义 | 现存 | |||
DROP FOREIGN TABLE | DROP | FOREIGN TABLE | — | |
| 移除一个外部表 | 现存 | |||
CREATE SERVER | CREATE | SERVER | 111 次 | |
| 定义一个新的外部服务器 | 现存 | |||
ALTER SERVER | ALTER | SERVER | 141 次 | |
| 更改外部服务器的定义 | 现存 | |||
DROP SERVER | DROP | SERVER | — | |
| 移除一个外部服务器描述符 | 现存 | |||
CREATE USER MAPPING | CREATE | USER MAPPING | 142 次 | |
| 定义用户到外部服务器的新映射 | 现存 | |||
ALTER USER MAPPING | ALTER | USER MAPPING | 141 次 | |
| 更改用户映射的定义 | 现存 | |||
DROP USER MAPPING | DROP | USER MAPPING | 141 次 | |
| 删除外部服务器的用户映射 | 现存 | |||