
# CREATE FOREIGN DATA WRAPPER
#### 功能描述
创建一个新的外部数据封装器。创建外部数据封装器的用户成为其所有者。
#### 注意事项
- 外部数据封装器的名字必须在数据库中唯一。
- 只有初始用户和系统管理员用户可以创建外部数据封装器。
 
#### 语法格式
```
CREATE FOREIGN DATA WRAPPER name
[ HANDLER handler_function | NO HANDLER ]
[ VALIDATOR validator_function | NO VALIDATOR ]
[ OPTIONS ( option 'value' [, ... ] ) ];
```
#### 参数说明
- **name**
  要创建的外部数据封装器的名字
  
- **HADNLER handler_function**
  handler_function是先前已经注册了的函数的名字，用来为外部表检索执行函数。 处理器函数必须没有参数，并且它的返回类型必须为fdw_handler。
  不用处理器函数创建外部数据封装器是可能的，但是使用这种封装器的外部表只能被声明，不能被访问。
  
- **VALIDATOR validator_function**
  validator_function 是先前已经注册了的函数的名字用来检查提供给外部数据封装器的通用选项， 还有使用该外部数据封装器的外部服务器、用户映射和外部表的选项。 如果没有验证器函数或声明了NO VALIDATOR， 那么在创建时将不检查选项。（外部数据封装器可能在运行时忽略或拒绝无效的选项说明， 取决于实现。）验证器函数必须接受两个参数：一个类型为text\[\]， 将包含存储在系统目录中的选项的数组，一个类型为oid， 是包含这些选项的系统目录的OID。忽略返回类型；该函数应该使用 ereport(ERROR)函数报告无效选项。
  
- **OPTIONS ( option 'value' \[, ... \] )**
  这个子句为新的外部数据封装器声明选项。允许的选项名和值是特定于每个外部数据封装器的， 并且是经过外部数据封装器的验证器函数验证了的。选项名必须是唯一的。
  
 
#### 示例
```
--创建一个无用的外部数据封装器dummy。
gaussdb=# CREATE FOREIGN DATA WRAPPER dummy;
--创建一个带有处理器函数file_fdw_handler 的外部数据封装器file。
gaussdb=# CREATE FOREIGN DATA WRAPPER file HANDLER file_fdw_handler;
--创建一个带有一些选项的外部数据封装器mywrapper。
gaussdb=# CREATE FOREIGN DATA WRAPPER mywrapper OPTIONS (debug 'true');
```
#### 相关链接
[ALTER FOREIGN DATA WRAPPER](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-1744.html#ZH-CN_TOPIC_0000002235270441)，[DROP FOREIGN DATA WRAPPER](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-1746.html#ZH-CN_TOPIC_0000002235270577)
