file_fdw
file_fdw模块提供了外部数据封装器file_fdw,可以用来在服务器的文件系统中访问数据文件。数据文件必须是COPY FROM可读的格式,具体请参见《开发指南》中“SQL参考 > SQL语法 > COPY”章节。使用file_fdw访问的数据文件是当前可读的,不支持对该数据文件的写入操作。
当前GaussDB会默认编译file_fdw,initdb的时候会在pg_catalog schema中创建该插件。
file_fdw对应的server和外表只允许数据库的初始用户或开启运维模式时的运维管理员创建。
使用file_fdw创建的外部表可以有下列选项:
- filename
- format
- header
- delimiter
- quote
- escape
- null
- encoding
- force_not_null
这是一个布尔选项。如果为真,则声明字段的值不应该匹配空字符串(也就是, 文件级别null选项)。与COPY的 FORCE_NOT_NULL选项里的字段相同。
- file_fdw不支持COPY的OIDS和 FORCE_QUOTE选项。
- 这些选项只能为外部表或外部表的字段声明,不是file_fdw的选项,也不是使用file_fdw的服务器或用户映射的选项。
- 修改表级别的选项需要系统管理员权限。因为安全原因,只有系统管理员能够决定读取的文件。
- 对于一个使用file_fdw的外部表,EXPLAIN可显示要读取的文件名和文件大小(单位:字节)。 指定了COSTS OFF关键字之后,不显示文件大小。
使用file_fdw
- 创建服务器对象:CREATE SERVER
- 创建用户映射:CREATE USER MAPPING
- 删除用户映射:DROP USER MAPPING
- 删除服务器对象:DROP SERVER
示例
--创建server。 gaussdb=# CREATE SERVER file_server FOREIGN DATA WRAPPER file_fdw; CREATE SERVER --创建外表。 gaussdb=# CREATE FOREIGN TABLE file_ft(id int, name text) SERVER file_server OPTIONS(filename '/tmp/1.csv', format 'csv', delimiter ','); CREATE FOREIGN TABLE --删除外表。 gaussdb=# DROP FOREIGN TABLE file_ft; DROP FOREIGN TABLE --删除server。 gaussdb=# DROP SERVER file_server; DROP SERVER
注意事项
- 使用file_fdw需要指定要读取的文件,请先准备好该文件,并授予数据库对该文件的读取权限。
- 不支持DROP EXTENSION file_fdw操作。
- 扩展功能为内部使用功能,不建议用户使用。